質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HiveQL

HiveQLは、Hive内の管理データを操作するのに使用されるSQL寄りのデータ操作言語です。HiveはHadoop上で動くソフトウェアで、HiveQLで記述した命令をMapReduceに自動に変換することができ、データ解析を容易に行うことが可能になります。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

585閲覧

Stringで保存した小数点の列、INSERT OVERWRITEしたテーブルで総和をとったところ小数点2桁以下で合計が異なる

Satomi07

総合スコア24

HiveQL

HiveQLは、Hive内の管理データを操作するのに使用されるSQL寄りのデータ操作言語です。HiveはHadoop上で動くソフトウェアで、HiveQLで記述した命令をMapReduceに自動に変換することができ、データ解析を容易に行うことが可能になります。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/09/14 02:08

編集2020/09/14 04:29

緯度経度を含むテーブルを作成、
latitude,longitudeにはINSERT INTO, INSERT OVERWRITE しかしてないです。

確認のため列ごとの合計を取ったところ、
latitudeの合計値が小数点2桁以下でわずかに異なってしまいました。

しかし他の列(固有IDの数、speedの合計)はすべて同じで、行数も増減ありません。
stringで保存しているのに、INSERT, OVERWRITEしただけで値が変わってしまうことはありますか?

行数は約11億件です。

元データ テーブル
ID string
latitude string
longitude string
speed string



作成したテーブル
ID string
latitude string
longitude string
speed string
d_speed
ma_speed

new tableに新たな列を作り、INSERT OVERWRITEしています。

INSERT INTO new table
ID string,
latitude,
longitude,
speed,
<その他データの保管処理、計算処理など
latitude,longitudeは一切計算していません>
FROM old table

INSERT OVERWRITE new table
ID string,
latitude,
longitude,
speed,
<その他データの保管処理、計算処理など
latitude,longitudeは一切計算していません>
FROM new table

検算のため列ごとにカウントしたり挿話を取りました。
SELECT COUNT() FROM new table
SELECT COUNT(
) FROM old table
→一致

SELECT COUNT (DISTINCT ID) FROM new table
SELECT COUNT (DISTINCT ID) FROM old table
→一致

SELECT SUM(latitude) FROM new table
SELECT SUM(latitude) FROM old table
→小数点二けた以下が不一致

SELECT SUM(speed) FROM new table
SELECT SUM(speed) FROM old table
→一致

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/09/14 02:10

どういう計算式で、どういうふうに計算して、どう結果が違ったんでしょうか。 具体例も示して、詳しく説明しましょう
Satomi07

2020/09/14 02:18

ありがとうございます、質問を編集しました。
Orlofsky

2020/09/14 03:53

>Stringで保存した小数点の列 なぜ最初から数値型にしないのでしょうか? 誤差も出やすくなるだろうと想像できるし、暗黙の型変換で処理速度も落ちるだろうに。 テーブル定義はCREATE TABLEに、現象を再現できるレベルのデータも提示できた方が解決は早そうです。
Satomi07

2020/09/14 04:23 編集

数値型だと丸められてしまうからStringにしていました。 (要求でもありました) すみません、Stringで「誤差が出やすくなる」というのはどういうことでしょうか?
Satomi07

2020/09/14 04:31

当初は数値型の予定でしたが、先方の要求がStringだったのもありまして。 ※基礎的な質問ですみません、Stringに変換したデータが、書き変わることってあるのでしょうか?
Satomi07

2020/09/14 04:33

データ総数が11億で、小数点一桁以下の誤差なので、おそらく型変換時のミスだとは思うのですけど、Stringならば丸められることもないと思っていたのですが…。
Orlofsky

2020/09/14 04:55

数値で11億件で試しては?誤差がなければ数値にしたいと依頼元に相談する。
Satomi07

2020/09/14 04:57

そうか、Stringで保存しても、全部数字なので、認識される際にlongとかになってるのでしょうか。
Satomi07

2020/09/14 06:26

ありがとうございます。回答に書いていただけませんか?ベストアンサーにするので。
guest

回答1

0

ベストアンサー

SUMするためには数値型でなくてはなりません。
11億件全件のデータをSTRING型から数値型に変換してから、SUMします。

SELECT SUM(latitude) FROM new table SELECT SUM(latitude) FROM old table

投稿2020/09/14 06:46

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問