レガシー SQL のデータ型

このドキュメントでは、BigQuery のレガシー SQL のクエリ構文でサポートされるデータ型について詳しく説明します。BigQuery で推奨されるクエリ構文は GoogleSQL です。GoogleSQL のデータ型については、GoogleSQL のデータ型をご覧ください。

レガシー SQL のデータ型

データには、次のデータ型を含めることができます。

データ型 指定できる値
STRING 可変長文字(UTF-8)データ。
BYTES 可変長文字バイナリデータ。
  • インポートされた BYTES データは、BigQuery が読み取って変換できる Avro BYTES データを除き、base64 エンコードされている必要があります。
  • BigQuery テーブルから読み取られた BYTES データは、Avro の bytes データ型が適用される Avro 形式にエクスポートするのでない限り、base64 エンコードされます。
INTEGER

64 ビット符号付き整数。

BigQuery API を使用して [-253+1, 253-1] の範囲外の整数(ほとんどの場合 9,007,199,254,740,991 を超える数)を整数型(INT64)の列に読み込む場合は、データの破損を避けるため、文字列として渡す必要があります。この問題は、JSON/ECMAScript の整数のサイズ制限が原因で発生します。詳細については、RFC 7159 の Numbers のセクションをご覧ください。

FLOAT 倍精度浮動小数点形式。
NUMERIC レガシー SQL では NUMERIC のサポートに制限があります詳細については、レガシー SQL の正確な数値をご覧ください。
BIGNUMERIC レガシー SQL では BIGNUMERIC のサポートに制限があります詳細については、レガシー SQL の正確な数値をご覧ください。
BOOLEAN
  • CSV 形式: 1 または 0true または falset または fyes または noy または n(すべて大文字と小文字の区別なし)。
  • JSON 形式: true または false(大文字と小文字の区別なし)。
RECORD 1 つ以上の他のフィールドのコレクション。
TIMESTAMP

TIMESTAMP データ型は、UNIX のタイムスタンプまたはカレンダー日時として記述できます。BigQuery は、TIMESTAMP データをマイクロ秒の精度で UNIX タイムスタンプとして内部的に格納します。

UNIX タイムスタンプ

正または負の小数。正の数値はエポック(1970-01-01 00:00:00 UTC)からの秒数を指定し、負の数値はエポックまでの秒数を指定します。小数点以下最大 6 桁(マイクロ秒の精度)が保持されます。

日時文字列

YYYY-MM-DD HH:MM:SS の形式の日時文字列。UTCZ の指定子がサポートされます。

日時文字列ではタイムゾーン オフセットを指定できますが、BigQuery では値を内部形式に変換した後にオフセットは保持されません。元のタイムゾーン データを保持する必要がある場合は、タイムゾーン オフセットを別の列に格納します。1 桁のタイムゾーン オフセットを指定する場合は、先頭にゼロを付ける必要があります。

JSON 形式を使用する場合は、日時文字列を引用符で囲む必要があります。

次の例は、UNIX タイムスタンプと日時文字列両方の形式で特定の日付を記述する同一の方法を示しています。

イベント UNIX タイムスタンプ形式 日時文字列形式
オクラホマ シティ付近で小さな(M4.2)地震が発生
1408452095.220
1408452095.220000
2014-08-19 07:41:35.220 -05:00
2014-08-19 12:41:35.220 UTC
2014-08-19 12:41:35.220
2014-08-19 12:41:35.220000
2014-08-19T12:41:35.220Z
ニール アームストロングが月面に降り立つ
-14182916
1969-07-20 20:18:04
1969-07-20 20:18:04 UTC
1969-07-20T20:18:04
Y10k バグの修正期限
253402300800
2.53402300800e11
10000-01-01 00:00
DATE レガシー SQL では、DATE のサポートに制限があります。詳しくは、レガシー SQL の常用時をご覧ください。
TIME レガシー SQL では、TIME のサポートに制限があります。詳しくは、レガシー SQL の常用時をご覧ください。
DATETIME レガシー SQL では、DATETIME のサポートに制限があります。詳しくは、レガシー SQL の常用時をご覧ください。

レガシー SQL の正確な数値

SELECT list (with aliases)GROUP BY keys、ウィンドウ関数のパススルー フィールドなどの非変更句の NUMERIC 値または BIGNUMERIC 値を読み取ることができます。ただし、比較を含む NUMERIC 値または BIGNUMERIC 値に対する計算では、未定義の結果が生成されます。

レガシー SQL では、次のキャストおよび変換関数がサポートされています。

  • CAST(<numeric> AS STRING)
  • CAST(<bignumeric> AS STRING)
  • CAST(<string> AS NUMERIC)
  • CAST(<string> AS BIGNUMERIC)

レガシー SQL の常用時

常用時のデータ型 DATE、TIME、および DATETIME を読み込んで、ウィンドウ関数で SELECT list (with aliases)GROUP BY keys、パススルー フィールドなどの非変更演算子を使ってそれらのデータ型を処理できます。ただし、常用時の値に対する計算(比較を含む)では、未定義の結果が生成されます。

レガシー SQL では、次のキャストおよび変換関数がサポートされています。

  • CAST(<date> AS STRING)
  • CAST(<time> AS STRING)
  • CAST(<datetime> AS STRING)
  • CAST(<string> AS DATE)
  • CAST(<string> AS TIME)
  • CAST(<string> AS DATETIME)

実際には、レガシー SQL では、常用時の値は整数として解釈され、常用時の値である考える整数に対する演算子により、予期しない結果が生成されます。

常用時のデータ型で値を計算するには、DATEDATETIMETIME データ型に対する SQL 演算子がすべてサポートされている GoogleSQL の使用を検討してください。

次のステップ

  • API を使用してフィールドのデータ型を設定するには、schema.fields.type をご覧ください。
  • GoogleSQL のデータ型については、データ型をご覧ください。