SnowConvert AI - BigQuery - データ型

Snowflakeは、列、ローカル変数、式、プロバイダーを含むさまざまな SQL コンストラクトにわたって、基本的な SQL データ型の大部分を、特定の制限付きでサポートしています。

ブールデータ型

BigQuery

Snowflake

メモ

[BOOL/BOOLEAN](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#boolean_type)

[BOOLEAN](https://docs.snowflake.com/en/sql-reference/data-types-logical#boolean)

バイトデータ型

BigQuery

Snowflake

メモ

[BYTES](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#bytes_type)

[BINARY](https://docs.snowflake.com/en/sql-reference/data-types-text#binary)

BYTES データ型はSnowflakeではサポートされていません。代わりに BINARY が使用されます。詳細については、[BYTES](#bytes)データ型のドキュメントをご参照ください。

日付データ型

BigQuery

Snowflake

メモ

[DATE](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#date_type)

[DATE](https://docs.snowflake.com/en/sql-reference/data-types-datetime#date)

[DATETIME](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#date_type)

[DATETIME](https://docs.snowflake.com/en/sql-reference/data-types-datetime#datetime)

DATETIME は、Snowflake の TIMESTAMP_NTZ のエイリアスです。

[TIMESTAMP](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#timestamp_type)

[TIMESTAMP_TZ](https://docs.snowflake.com/en/sql-reference/data-types-datetime#timestamp-ltz-timestamp-ntz-timestamp-tz)

TIMESTAMP データ型は TIMESTAMP_TZ に変換されます。詳細については、 TIMESTAMP データ型のドキュメントをご参照ください。

[TIME](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#time_type)

[TIME](https://docs.snowflake.com/en/sql-reference/data-types-datetime#time)

地理データ型

BigQuery

Snowflake

メモ

[GEOGRAPHY](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#geography_type)

[GEOGRAPHY](https://docs.snowflake.com/en/sql-reference/data-types-geospatial#geography-data-type)

インターバルデータ型

BigQuery

Snowflake

メモ

[INTERVAL](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#interval_type)

[VARCHAR(30)](https://docs.snowflake.com/en/sql-reference/data-types-text#varchar)

INTERVAL データ型はSnowflakeではサポートされていません。代わりに VARCHAR が使用されます。詳細については、[INTERVAL](#interval)データ型のドキュメントをご参照ください。

Jsonデータ型

BigQuery

Snowflake

メモ

[JSON](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#json_type)

[VARIANT](https://docs.snowflake.com/en/sql-reference/data-types-semistructured#variant)

JSON データ型はSnowflakeではサポートされていません。代わりに VARIANT が使用されます。詳細については、[JSON](#json)データ型のドキュメントをご参照ください。

数値データ型

BigQuery

Snowflake

メモ

[INT64](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#numeric_types)

[INT](https://docs.snowflake.com/en/sql-reference/data-types-numeric#int-integer-bigint-smallint-tinyint-byteint)

INT は、Snowflakeの NUMBER データ型のエイリアスです。最大精度とスケールは NUMBER (38,37)です。

[INT](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#numeric_types)

[INT](https://docs.snowflake.com/en/sql-reference/data-types-numeric#int-integer-bigint-smallint-tinyint-byteint)

INT は、Snowflakeの NUMBER データ型のエイリアスです。最大精度とスケールは NUMBER (38,37)です。

[SMALLINT](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#numeric_types)

[SMALLINT](https://docs.snowflake.com/en/sql-reference/data-types-numeric#int-integer-bigint-smallint-tinyint-byteint)

SMALLINT は、Snowflakeの NUMBER データ型のエイリアスです。最大精度とスケールは NUMBER (38,37)です。

[INTEGER](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#numeric_types)

[INTEGER](https://docs.snowflake.com/en/sql-reference/data-types-numeric#int-integer-bigint-smallint-tinyint-byteint)

INTEGER は、Snowflakeの NUMBER データ型のエイリアスです。最大精度とスケールは NUMBER (38,37)です。

[BIGINT](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#numeric_types)

[BIGINT](https://docs.snowflake.com/en/sql-reference/data-types-numeric#int-integer-bigint-smallint-tinyint-byteint)

BIGINT は、Snowflakeの NUMBER データ型のエイリアスです。最大精度とスケールは NUMBER (38,37)です。

[TINYINT](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#numeric_types)

[TINYINT](https://docs.snowflake.com/en/sql-reference/data-types-numeric#int-integer-bigint-smallint-tinyint-byteint)

TINYINT は、Snowflakeの NUMBER データ型のエイリアスです。最大精度とスケールは NUMBER (38,37)です。

[BYTEINT](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#numeric_types)

[BYTEINT](https://docs.snowflake.com/en/sql-reference/data-types-numeric#int-integer-bigint-smallint-tinyint-byteint)

BYTEINT は、Snowflakeの NUMBER データ型のエイリアスです。最大精度とスケールは NUMBER (38,37)です。

[NUMERIC](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#numeric_types)

[NUMERIC](https://docs.snowflake.com/en/sql-reference/data-types-numeric#decimal-dec-numeric)

NUMERIC は、Snowflakeの NUMBER データ型のエイリアスです。最大精度とスケールは NUMBER (38,37)です。

[DECIMAL](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#numeric_types)

[DECIMAL](https://docs.snowflake.com/en/sql-reference/data-types-numeric#decimal-dec-numeric)

DECIMAL は、Snowflakeの NUMBER データ型のエイリアスです。最大精度とスケールは NUMBER (38,37)です。

[BIGNUMERIC](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#numeric_types)

[NUMERIC](https://docs.snowflake.com/en/sql-reference/data-types-numeric#decimal-dec-numeric)​

Snowflakeは、 BIGNUMERIC データ型をサポートしていません。代わりに NUMERIC を使用してください。 BIGNUMERIC の精度76,76はSnowflakeの制限(38)を超えているため、切り捨てや丸めが行われ、重大な不正確さが生じる可能性があります。

[BIGDECIMAL](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#numeric_types)

[DECIMAL](https://docs.snowflake.com/en/sql-reference/data-types-numeric#decimal-dec-numeric)

Snowflakeは、 BIGDECIMAL データ型をサポートしていません。代わりに NUMERIC を使用してください。 BIGDECIMAL の精度76,76はSnowflakeの制限(38)を超えているため、切り捨てや丸めが行われ、重大な不正確さが生じる可能性があります。

[FLOAT64](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#floating_point_types)

[FLOAT](https://docs.snowflake.com/en/sql-reference/data-types-numeric#data-types-for-floating-point-numbers)

文字列データ型

BigQuery

Snowflake

メモ

[STRING](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#string_type)

[STRING](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#string_type)

STRING は、Snowflakeの VARCHAR データ型のエイリアスです。VARCHAR にはUnicode UTF-8文字が含まれます。

ANY に TYPE

BigQuery の ANY TYPE データ型の変換仕様

説明

以下は、 CREATE FUNCTION ステートメント内での ANY TYPE の使い方に関する情報の抜粋です。

ANY TYPE と等しい型を持つパラメーターは、関数の呼び出し時に複数の引数の型と一致する可能性があります。

  • 複数のパラメーターの型が ANY TYPE である場合、 BigQuery はこれらの引数間の型の関係を強制しません。

  • 関数の戻り値の型を ANY TYPE にすることはできません。これは省略するか、 sql_expression に基づいて自動的に決定されるか、明示的な型を指定する必要があります。

  • 関数の定義と互換性のない型の引数を渡すと、呼び出し時にエラーになります。

サンプルソースパターン

UDFs の型定義

ANY TYPE は関数のパラメーターの型としてのみ見つけることができます。SnowConvert AI は、 ANY TYPEVARIANT に自動的に変換します。

BigQuery
CREATE FUNCTION addFourAndDivideAny(x ANY TYPE, y ANY TYPE)
AS (
  (x + 4) / y
);
Copy
Snowflake
CREATE FUNCTION addFourAndDivideAny (x VARIANT, y VARIANT)
RETURNS VARIANT
AS
$$
  ((x + 4) / y) :: VARIANT
$$;
Copy

ARRAY<T>

ARRAY データ型の BigQuery からSnowflakeへの変換仕様

説明

BigQuery において、配列は、配列以外の値の0個以上の要素の順序付きリストです。配列内の要素は同じ型を共有する必要があります。([配列タイプ。 BigQuery](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#array_type))

サンプルソースパターン

BigQuery

CREATE TABLE test.arrayTable
(
  col1 ARRAY<INT64>
);

CREATE TABLE test.anotherArrayTable
(
  col2 ARRAY<INT64>
);

INSERT INTO test.arrayTable VALUES ([4, 10, 55]);
INSERT INTO test.arrayTable VALUES ([6, 7, 33]);
INSERT INTO test.arrayTable VALUES ([50, 12, 22]);

INSERT INTO test.anotherArrayTable VALUES ([9, 11, 52]);
INSERT INTO test.anotherArrayTable VALUES ([3, 18, 11]);
INSERT INTO test.anotherArrayTable VALUES ([33, 27, 43]);
Copy

Snowflake

CREATE TABLE test.arrayTable
(
  col1 ARRAY DEFAULT []
);

CREATE TABLE test.anotherArrayTable
(
  col2 ARRAY DEFAULT []
);

INSERT INTO test.arrayTable SELECT [4, 10, 55];
INSERT INTO test.arrayTable SELECT [6, 7, 33];
INSERT INTO test.arrayTable SELECT [50, 12, 22];

INSERT INTO test.anotherArrayTable SELECT [9, 11, 52];
INSERT INTO test.anotherArrayTable SELECT [3, 18, 11];
INSERT INTO test.anotherArrayTable SELECT [33, 27, 43];
Copy

インデックスによる ARRAY アクセス

BigQuery
SELECT
col1[0] + 4 AS byIndex,
col1[OFFSET(0)] + 4 AS byOffset,
col1[ORDINAL(1)] + 4 AS byOrdinal
FROM test.arrayTable ORDER BY col1[0];
Copy
Snowflake
SELECT
--** SSC-FDM-BQ0001 - ACCESSING ARRAYS PRODUCES NULL INSTEAD OF AN ERROR FOR POSITIVE OUT OF BOUNDS INDEXES IN SNOWFLAKE **
col1[0] + 4 AS byIndex,
--** SSC-FDM-BQ0001 - ACCESSING ARRAYS PRODUCES NULL INSTEAD OF AN ERROR FOR POSITIVE OUT OF BOUNDS INDEXES IN SNOWFLAKE **
col1[0] + 4 AS byOffset,
--** SSC-FDM-BQ0001 - ACCESSING ARRAYS PRODUCES NULL INSTEAD OF AN ERROR FOR POSITIVE OUT OF BOUNDS INDEXES IN SNOWFLAKE **
col1[1 - 1] + 4 AS byOrdinal
FROM
test.arrayTable
ORDER BY
--** SSC-FDM-BQ0001 - ACCESSING ARRAYS PRODUCES NULL INSTEAD OF AN ERROR FOR POSITIVE OUT OF BOUNDS INDEXES IN SNOWFLAKE **
col1[0];
Copy

インデックスによる安全な ARRAY アクセス

BigQuery
SELECT
col1[SAFE_OFFSET(0)] AS byOffsset,
col1[SAFE_OFFSET(-4)] AS byOffsetUnderflow,
col1[SAFE_OFFSET(500)] AS byOffsetOverflow,
col1[SAFE_ORDINAL(1)] AS byOrdinal,
col1[SAFE_ORDINAL(-4)] AS byOrdinalUnderflow,
col1[SAFE_ORDINAL(500)] AS byOrdinalOverflow
FROM test.arrayTable ORDER BY col1[0];
Copy
Snowflake
SELECT
PUBLIC.SAFE_OFFSET_UDF(col1, 0) AS byOffsset,
PUBLIC.SAFE_OFFSET_UDF(col1, -4) AS byOffsetUnderflow,
PUBLIC.SAFE_OFFSET_UDF(col1, 500) AS byOffsetOverflow,
PUBLIC.SAFE_OFFSET_UDF(col1, 1 - 1) AS byOrdinal,
PUBLIC.SAFE_OFFSET_UDF(col1, -4 - 1) AS byOrdinalUnderflow,
PUBLIC.SAFE_OFFSET_UDF(col1, 500 - 1) AS byOrdinalOverflow
FROM test.arrayTable ORDER BY 
--** SSC-FDM-BQ0001 - ACCESSING ARRAYS PRODUCES NULL INSTEAD OF AN ERROR FOR POSITIVE OUT OF BOUNDS INDEXES IN SNOWFLAKE **
col1[0];
Copy

VALUES 句に ARRAY を含む INSERT

BigQuery
INSERT INTO test.arrayTable VALUES ([4, 10]);

INSERT INTO test.arrayTable (COL1)
VALUES ([1, 2, 3]), ([4, 5, 6]);

SELECT col1 FROM test.arrayTable ORDER BY col1[0], col1[1];
Copy
Snowflake
INSERT INTO test.arrayTable SELECT [4, 10];

INSERT INTO test.arrayTable (COL1)
SELECT [1, 2, 3] 
UNION ALL
SELECT [4, 5, 6];

SELECT col1 FROM
  test.arrayTable
ORDER BY
  --** SSC-FDM-BQ0001 - ACCESSING ARRAYS PRODUCES NULL INSTEAD OF AN ERROR FOR POSITIVE OUT OF BOUNDS INDEXES IN SNOWFLAKE **
  col1[0],
  --** SSC-FDM-BQ0001 - ACCESSING ARRAYS PRODUCES NULL INSTEAD OF AN ERROR FOR POSITIVE OUT OF BOUNDS INDEXES IN SNOWFLAKE **
  col1[1];
Copy

MERGE ステートメント

BigQuery
MERGE INTO test.anotherArrayTable
USING test.arrayTable
ON col1[0] = col2[0]
WHEN MATCHED THEN UPDATE SET col2 = col1
WHEN NOT MATCHED THEN INSERT VALUES ([100, 100, 100]);

SELECT col2 FROM test.anotherArrayTable ORDER BY col2[0];
Copy
Snowflake
MERGE INTO test.anotherArrayTable
USING test.arrayTable
ON col1[0] = col2[0]
WHEN MATCHED THEN UPDATE SET col2 = col1
WHEN NOT MATCHED THEN INSERT VALUES ([100, 100, 100]) !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'MergeStatement' NODE ***/!!!;

SELECT col2 FROM
  test.anotherArrayTable
ORDER BY
  --** SSC-FDM-BQ0001 - ACCESSING ARRAYS PRODUCES NULL INSTEAD OF AN ERROR FOR POSITIVE OUT OF BOUNDS INDEXES IN SNOWFLAKE **
  col2[0];
Copy

ARRAY DEFAULT 列値の挿入/更新

BigQuery
 INSERT INTO test.arrayTable VALUES (DEFAULT);

UPDATE test.arrayTable
SET col1 = DEFAULT
WHERE TRUE;

SELECT col1 FROM test.arrayTable;
Copy
Snowflake
 INSERT INTO test.arrayTable SELECT [];

UPDATE test.arrayTable
SET col1 = DEFAULT
WHERE TRUE;

SELECT col1 FROM test.arrayTable;
Copy

INSERT/UPDATE、NULL 値

BigQuery
 INSERT INTO test.arrayTable
  SELECT
    numbers
  FROM
    (SELECT [6] AS numbers
    UNION ALL
    SELECT CAST(NULL AS ARRAY<INT64>));

UPDATE test.arrayTable
SET col1 = NULL
WHERE ARRAY_LENGTH(col1) > 1;

SELECT col1 FROM test.arrayTable ORDER BY ARRAY_LENGTH(col1);
Copy
Snowflake
INSERT INTO test.arrayTable
SELECT
  numbers
FROM
  (SELECT [6] AS numbers
  UNION ALL
  SELECT IFNULL(CAST(NULL AS ARRAY), []));

UPDATE test.arrayTable
SET col1 = IFNULL(NULL, [])
WHERE ARRAY_SIZE(col1) > 1;

SELECT col1 FROM test.arrayTable ORDER BY ARRAY_SIZE(col1);
Copy

ARRAY 連結

BigQuery
SELECT [50, 30, 12] || [22, 33, 44] AS result;
Copy
Snowflake
SELECT ARRAY_CAT([50, 30, 12], [22, 33, 44]) AS result;
Copy

ARRAY はパラメーター/戻り値の型として使用されます

BigQuery
CREATE FUNCTION test.myArrayFunction (valuesArray ARRAY<INT64>, otherValue INTEGER)
RETURNS ARRAY<INT64>
AS
(
  valuesArray || [otherValue]
);

SELECT test.myArrayFunction([5, 20, 10], 55) AS result;
Copy
Snowflake
CREATE FUNCTION test.myArrayFunction (valuesArray ARRAY, otherValue INTEGER)
RETURNS ARRAY
AS
$$
  ARRAY_CAT(valuesArray, [otherValue])
$$;

SELECT test.myArrayFunction([5, 20, 10], 55) AS result;
Copy

既知の問題

1.非安全な ARRAY アクセスは、正の範囲外インデックスに対しては失敗しません

BigQuery では、 SAFE_OFFSET または SAFE_ORDINAL を使用しない場合、インデックス値が低すぎる(アンダーフロー)または高すぎる(オーバーフロー)場合、インデックスによる配列要素へのアクセスは失敗します。しかし、Snowflakeではエラーはアンダーフローの場合にのみスローされ、オーバーフローエラーが発生するインデックスは代わりに NULL 値を生成します。

配列内の要素への安全でないアクセスが検出されると、 SnowConvert AI は[SSC-FDM-BQ0001](../../general/technical-documentation/issues-and-troubleshooting/function-difference/bigqueryFDM.md#ssc-fdm-bq0001)を生成して、これについてユーザーに警告します。

BYTES

バイトデータ型と使用法

説明

バイナリ文字列内で許可される最大Lバイトのバイトシーケンス。最大長は8 MB (8,388,608バイト)です。詳細については、[BigQuery BYTES データ型](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#bytes_type)をご参照ください。

注釈

BYTES データ型はSnowflakeではサポートされていません。現在[BINARY](https://docs.snowflake.com/en/sql-reference/data-types-text#binary)に変換されています。

サンプルソースパターン

BYTES 出力形式

BigQuery のバイナリデータ型のデフォルトの出力形式は 'BASE64'、Snowflake では 'HEX' です。このため、バイナリ列が選択が選択されると、[BASE64_ENCODE](https://docs.snowflake.com/en/sql-reference/functions/base64_encode)関数が自動的に追加されます。BigQuery のデフォルトの形式を維持するためです。

BigQuery
 CREATE OR REPLACE TABLE bytesTable
(
  COL1 BYTES,
  COL2 BYTES(20)
);

INSERT INTO bytesTable VALUES (B"01020304", B"""AABBCCDD""");
INSERT INTO bytesTable VALUES (B'''\x01\x02\x03''', B"/+A=");

SELECT COL1 FROM bytesTable;
Copy
Snowflake:
CREATE OR REPLACE TABLE bytesTable
(
  COL1 BINARY,
  COL2 BINARY(20)
);

INSERT INTO bytesTable
SELECT
  TRY_TO_BINARY('01020304', 'utf-8'),
  TRY_TO_BINARY('AABBCCDD', 'utf-8');
  
INSERT INTO bytesTable
SELECT
  TRY_TO_BINARY('\x01\x02\x03', 'utf-8'),
  TRY_TO_BINARY('/+A=', 'utf-8');
  
SELECT BASE64_ENCODE( COL1) FROM bytesTable;
Copy

自動的に追加されず、 BASE64 形式でデータを表示したい場合は、[BASE64_ENCODE](https://docs.snowflake.com/en/sql-reference/functions/base64_encode)関数を使用するか、[BINARY_OUTPUT_FORMAT](https://docs.snowflake.com/en/sql-reference/parameters#binary-output-format)形式を設定できます。


BYTES リテラル

以下のケースは、 BigQuery でバイトリテラルをフォーマットするために使用できる形式を表しています。

 B"abc"
B'''abc'''
b"""abc"""
Copy

Snowflakeではこれらのリテラルはサポートされていませんが、代わりに[TRY_TO_BINARY](https://docs.snowflake.com/en/sql-reference/functions/try_to_binary)関数を使用して入力式をバイナリ値に変換できます。この関数は、[TO _BINARY](https://docs.snowflake.com/en/sql-reference/functions/to_binary)の特別バージョンで、同じ操作を実行しますが、エラー処理がサポートされています。

変換のバイナリ形式は HEX 、 BASE64 、または UTF-8 になる可能性があることを考慮することが重要です。デフォルトは[BINARY_INPUT_FORMAT](https://docs.snowflake.com/en/sql-reference/parameters#binary-input-format)セッションパラメーターの値です。このパラメーターが設定されていない場合、デフォルト値は HEX です。

観察

  • BigQuery のバイナリデータ型のデフォルトの出力形式は 'BASE64' 、Snowflakeでは 'HEX' であることに注意してください。データを BASE64 形式で表示するには、[BASE64_ENCODE](https://docs.snowflake.com/en/sql-reference/functions/base64_encode)関数を使用するか、[BINARY_OUTPUT_FORMAT](https://docs.snowflake.com/en/sql-reference/parameters#binary-output-format)形式を設定できます。

  • Snowflakeでサポートされている形式は、 HEX BASE64 または UTF-8のみです。詳細については、Snowflakeの[バイナリ入出力](https://docs.snowflake.com/en/user-guide/binary-input-output)をご参照ください。

  • 値句へのデータ挿入に使用されるバイナリ関数は、Snowflakeではサポートされていません。

GEOGRAPHY

GEOGRAPHY データタイプと使用法

説明

点、ラインストリング、ポリゴンの集合であり、点集合として、または地球表面の一部として表現されます。詳細については、[BigQuery GEOGRAPHY データ型](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#geography_type)ご参照ください。

Success

Snowflakeでサポートされているデータ型。

サンプルソースパターン

GEOGRAPHY 出力形式

BigQuery における地理データ型のデフォルトの出力形式は WKT(Well-Known Text)**で、Snowflakeでは **WKB (Well-Known Binary)**です。このため、地理列が選択されると、[ST_ASWKT](https://docs.snowflake.com/en/sql-reference/functions/st_aswkt)関数が自動的に追加されます。また、テーブルのすべての列が選択され、それに地理列が含まれている場合、[GEOGRAPHY_OUTPUT_FORMAT](https://docs.snowflake.com/en/sql-reference/parameters#geography-output-forma)は WKT に設定されます。これはデフォルトの BigQuery 形式を維持するためです。

BigQuery
CREATE OR REPLACE TABLE test.geographyType
(
  COL1 GEOGRAPHY
);

INSERT INTO test.geographyType VALUES
    (ST_GEOGFROMTEXT('POINT(-122.35 37.55)')), (ST_GEOGFROMTEXT('LINESTRING(-124.20 42.00, -120.01 41.99)'));

SELECT COL1 FROM test.geographyType;
SELECT * FROM test.geographyType;	
Copy
Snowflake
CREATE OR REPLACE TABLE test.geographyType
(
  COL1 GEOGRAPHY
);

INSERT INTO test.geographyType
VALUES
    (
     --** SSC-FDM-BQ0010 - THE FUNCTION 'ST_GEOGFROMTEXT' IS NOT REQUIRED IN SNOWFLAKE. **
     'POINT(-122.35 37.55)'), (
     --** SSC-FDM-BQ0010 - THE FUNCTION 'ST_GEOGFROMTEXT' IS NOT REQUIRED IN SNOWFLAKE. **
     'LINESTRING(-124.20 42.00, -120.01 41.99)');
     
SELECT ST_ASWKT( COL1) FROM test.geographyType;
            
ALTER SESSION SET GEOGRAPHY_OUTPUT_FORMAT = 'WKT';
SELECT * FROM test.geographyType;
Copy

自動的に追加されず、 WKT 形式でデータを表示する場合は、ST_ASWKT 関数を使用するか、[GEOGRAPHY_OUTPUT_FORMAT](https://docs.snowflake.com/en/sql-reference/parameters#geography-output-format)形式を設定できます。


GEOGRAPHY データを挿入

地理型列にデータを挿入する場合、Snowflakeはデータが[WGS 84 標準](https://spatialreference.org/ref/epsg/wgs-84/)に準拠していることを自動的に検出するため、関数は必要ありません。

観察

  • 地理データ型のデフォルトの出力形式は WKT **(Well-Known Text)**であり、Snowflakeでは **WKB (Well-Known Binary)**であることに注意してください。また、WKT形式で表示する場合は、[ST_ASWKT](https://docs.snowflake.com/en/sql-reference/functions/st_aswkt)関数を使用するか、[GEOGRAPHYOUTPUT FORMAT](https://docs.snowflake.com/en/sql-reference/parameters#geography-output-format)形式を設定できます。

  • 値句にデータを挿入するために使用される地理関数は、Snowflakeでは必要ありません。

INTERVAL

インターバルデータの型と使用法

説明

INTERVAL オブジェクトは、特定の時点を参照せずに、期間または時間の量を表します。Snowflakeには同等のものがないため、Varcharに変換されます([BigQuery 言語リファレンス INTERVAL データ型](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#interval_type))。

構文

INTERVAL int64_expression datetime_part

INTERVAL datetime_parts_string starting_datetime_part TO ending_datetime_part
Copy

サンプルソースパターン

単一の DateTime 部分を持つ間隔

BigQuery
SELECT INTERVAL 1 YEAR;

SELECT CURRENT_DATE + INTERVAL 1 YEAR, 
  CURRENT_DATE + INTERVAL 1 QUARTER,
  CURRENT_DATE + INTERVAL 1 MONTH,
  CURRENT_DATE + INTERVAL 1 WEEK,
  CURRENT_DATE + INTERVAL 1 DAY,
  CURRENT_DATE + INTERVAL 1 HOUR,
  CURRENT_DATE + INTERVAL 1 MINUTE,
  CURRENT_DATE + INTERVAL 1 SECOND;
Copy
結果
1-0 0 0:0:0
Copy
2024-10-13T00:00:00
2024-01-13T00:00:00
2023-11-13T00:00:00
2023-10-20T00:00:00
2023-10-14T00:00:00
2023-10-13T01:00:00
2023-10-13T00:01:00
2023-10-13T00:00:01

Copy
Snowflake
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0107 - INTERVAL LITERAL IS NOT SUPPORTED BY SNOWFLAKE IN THIS SCENARIO  ***/!!! INTERVAL 1 YEAR;

SELECT
CURRENT_DATE() + INTERVAL '1 year',
CURRENT_DATE() + INTERVAL '1 quarter',
CURRENT_DATE() + INTERVAL '1 month',
CURRENT_DATE() + INTERVAL '1 week',
CURRENT_DATE() + INTERVAL '1 day',
CURRENT_DATE() + INTERVAL '1 hour',
CURRENT_DATE() + INTERVAL '1 minute',
CURRENT_DATE() + INTERVAL '1 second';
Copy
結果
2024-10-13
2024-01-13
2023-11-13
2023-10-20
2023-10-14
2023-10-13 01:00:00.000
2023-10-13 00:01:00.000
2023-10-13 00:00:01.000

Copy

Snowflakeでは、Interval データ型が直接クエリされるシナリオはサポートされていません。逆に、指定された日付の演算子として使用される場合は、[Interval定数](https://docs.snowflake.com/en/sql-reference/data-types-datetime.html#interval-constants)を使用して変換されます(可能な場合)。


DateTime 部分範囲を持つインターバル

BigQuery
 SELECT INTERVAL '2-1 10' YEAR TO DAY;

SELECT CURRENT_DATE + INTERVAL '2-11' YEAR TO MONTH,
  CURRENT_DATE + INTERVAL '2-11 28' YEAR TO DAY,
  CURRENT_DATE + INTERVAL '2-11 28 16' YEAR TO HOUR,
  CURRENT_DATE + INTERVAL '2-11 28 16:15' YEAR TO MINUTE,
  CURRENT_DATE + INTERVAL '2-11 28 16:15:14' YEAR TO SECOND,
  CURRENT_DATE + INTERVAL '11 28' MONTH TO DAY,
  CURRENT_DATE + INTERVAL '11 28 16' MONTH TO HOUR,
  CURRENT_DATE + INTERVAL '11 28 16:15' MONTH TO MINUTE,
  CURRENT_DATE + INTERVAL '11 28 16:15:14' MONTH TO SECOND,
  CURRENT_DATE + INTERVAL '28 16' DAY TO HOUR,
  CURRENT_DATE + INTERVAL '28 16:15' DAY TO MINUTE,
  CURRENT_DATE + INTERVAL '28 16:15:14' DAY TO SECOND,
  CURRENT_DATE + INTERVAL '16:15' HOUR TO MINUTE,
  CURRENT_DATE + INTERVAL '16:15:14' HOUR TO SECOND,
  CURRENT_DATE + INTERVAL '15:14' MINUTE TO SECOND;
Copy
結果
2-1 10 0:0:0
Copy
2026-09-13T00:00:00
2026-10-11T00:00:00
2026-10-11T16:00:00
2026-10-11T16:15:00
2026-10-11T16:15:14
2024-10-11T00:00:00
2024-10-11T16:00:00
2024-10-11T16:15:00
2024-10-11T16:15:14
2023-11-10T16:00:00
2023-11-10T16:15:00
2023-11-10T16:15:14
2023-10-13T16:15:00
2023-10-13T16:15:14
2023-10-13T00:15:14

Copy
Snowflake
 SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-0107 - INTERVAL LITERAL IS NOT SUPPORTED BY SNOWFLAKE IN THIS SCENARIO  ***/!!! INTERVAL '2-1 10' YEAR TO DAY;

SELECT
CURRENT_DATE() + INTERVAL '2y, 11mm',
CURRENT_DATE() + INTERVAL '2y, 11mm, 28d',
CURRENT_DATE() + INTERVAL '2y, 11mm, 28d, 16h',
CURRENT_DATE() + INTERVAL '2y, 11mm, 28d, 16h, 15m',
CURRENT_DATE() + INTERVAL '2y, 11mm, 28d, 16h, 15m, 14s',
CURRENT_DATE() + INTERVAL '11mm, 28d',
CURRENT_DATE() + INTERVAL '11mm, 28d, 16h',
CURRENT_DATE() + INTERVAL '11mm, 28d, 16h, 15m',
CURRENT_DATE() + INTERVAL '11mm, 28d, 16h, 15m, 14s',
CURRENT_DATE() + INTERVAL '28d, 16h',
CURRENT_DATE() + INTERVAL '28d, 16h, 15m',
CURRENT_DATE() + INTERVAL '28d, 16h, 15m, 14s',
CURRENT_DATE() + INTERVAL '16h, 15m',
CURRENT_DATE() + INTERVAL '16h, 15m, 14s',
CURRENT_DATE() + INTERVAL '15m, 14s';
Copy
結果
2026-09-13
2026-10-11
2026-10-11 16:00:00.000
2026-10-11 16:15:00.000
2026-10-11 16:15:14.000
2024-10-11
2024-10-11 16:00:00.000
2024-10-11 16:15:00.000
2024-10-11 16:15:14.000
2023-11-10 16:00:00.000
2023-11-10 16:15:00.000
2023-11-10 16:15:14.000
2023-10-13 16:15:00.000
2023-10-13 16:15:14.000
2023-10-13 00:15:14.000
Copy

インターバルの値は、サポートされているSnowflake形式に変換され、列の中にテキストとして挿入されます。 Snowflakeはデータ型としてインターバルをサポートしていないため、算術演算でのみサポートされます。 値を使用するためには、その値を抽出し、[インターバル定数](https://docs.snowflake.com/en/sql-reference/data-types-datetime.html#interval-constants)として使用する必要があります(可能な場)。


列データ型としてのインターバル

BigQuery
 CREATE OR REPLACE TABLE test.my_table (
  id INT NOT NULL,
  interval_column INTERVAL
);

INSERT INTO test.my_table
VALUES (1, INTERVAL '2-11 28' YEAR TO DAY);

INSERT INTO test.my_table
VALUES (2, INTERVAL '2-11 28 16:15:14' YEAR TO SECOND);

INSERT INTO test.my_table
VALUES (3, INTERVAL '11 28 16:15:14' MONTH TO SECOND);

INSERT INTO test.my_table
VALUES (4, INTERVAL '15:14' MINUTE TO SECOND);

SELECT * FROM test.my_table;
Copy
結果

ID

interval_column

1

2-11 28 0:0:0

2

2-11 28 16:15:14

3

0-11 28 16:15:14

4

0-0 0 0:15:14

Snowflake
 CREATE OR REPLACE TABLE test.my_table (
  id INT NOT NULL,
interval_column VARCHAR(30) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "bigquery",  "convertedOn": "04/01/2025",  "domain": "test" }}';

INSERT INTO test.my_table
VALUES (1, '2y, 11mm, 28d');

INSERT INTO test.my_table
VALUES (2, '2y, 11mm, 28d, 16h, 15m, 14s');

INSERT INTO test.my_table
VALUES (3, '11mm, 28d, 16h, 15m, 14s');

INSERT INTO test.my_table
VALUES (4, '15m, 14s');

SELECT * FROM
test.my_table;
Copy
結果

ID

interval_column

1

2y, 11mm, 28d

2

2y, 11mm, 28d, 16h, 15m, 14s

3

11mm, 28d, 16h, 15m, 14s

4

15m, 14s

BigQuery では、datetime_partは次の標準形式に従います。

[sign]Y-M [sign]D [sign]H:M:S[.F]

Copy

インターバル比較

BigQuery
SELECT INTERVAL 1 YEAR = INTERVAL 1 YEAR;

SELECT CURRENT_DATE + INTERVAL '-2 -16' DAY TO HOUR =  CURRENT_DATE + INTERVAL '-2 -16' DAY TO HOUR;

SELECT INTERVAL '-2 -16' DAY TO HOUR != INTERVAL '-2 16' DAY TO HOUR,
  INTERVAL '-2 -16' DAY TO HOUR <> INTERVAL '-2 16' DAY TO HOUR,
  INTERVAL '2 16:15' DAY TO MINUTE = INTERVAL '2 -16:15' DAY TO MINUTE,
  INTERVAL '2 16:15' DAY TO MINUTE > INTERVAL '2 -16:15' DAY TO MINUTE,
  INTERVAL '2 16:15' DAY TO MINUTE >= INTERVAL '2 -16:15' DAY TO MINUTE,
  INTERVAL '2 16:15' DAY TO MINUTE < INTERVAL '2 -16:15' DAY TO MINUTE,
  INTERVAL '2 16:15' DAY TO MINUTE <= INTERVAL '2 -16:15' DAY TO MINUTE,
  INTERVAL '1-5' YEAR TO MONTH = INTERVAL '1-5' YEAR TO MONTH,
  INTERVAL '1-5' YEAR TO MONTH > INTERVAL '2 16' DAY TO HOUR,
  INTERVAL '2-11 28 16:15:14.222' YEAR TO SECOND = INTERVAL '2-11 28 16:15:14.222' YEAR TO SECOND,
  INTERVAL '1-1 3' YEAR TO DAY = INTERVAL '13 3' MONTH TO DAY,
  INTERVAL '1-5' YEAR TO MONTH > INTERVAL '2 16' DAY TO HOUR;
Copy
Snowflake
SELECT
'1 year' = '1 year';

SELECT
CURRENT_DATE() + INTERVAL '-2d, -16h' = CURRENT_DATE() + INTERVAL '-2d, -16h';

SELECT
CURRENT_TIMESTAMP + INTERVAL '-2d, -16h' != CURRENT_TIMESTAMP + INTERVAL '-2d, 16h',
CURRENT_TIMESTAMP + INTERVAL '-2d, -16h' <> CURRENT_TIMESTAMP + INTERVAL '-2d, 16h',
CURRENT_TIMESTAMP + INTERVAL '2d, 16h, 15m' = CURRENT_TIMESTAMP + INTERVAL '2d, -16h, -15m',
CURRENT_TIMESTAMP + INTERVAL '2d, 16h, 15m' > CURRENT_TIMESTAMP + INTERVAL '2d, -16h, -15m',
CURRENT_TIMESTAMP + INTERVAL '2d, 16h, 15m' >= CURRENT_TIMESTAMP + INTERVAL '2d, -16h, -15m',
CURRENT_TIMESTAMP + INTERVAL '2d, 16h, 15m' < CURRENT_TIMESTAMP + INTERVAL '2d, -16h, -15m',
CURRENT_TIMESTAMP + INTERVAL '2d, 16h, 15m' <= CURRENT_TIMESTAMP + INTERVAL '2d, -16h, -15m',
CURRENT_TIMESTAMP + INTERVAL '1y, 5mm' = CURRENT_TIMESTAMP + INTERVAL '1y, 5mm',
CURRENT_TIMESTAMP + INTERVAL '1y, 5mm' > CURRENT_TIMESTAMP + INTERVAL '2d, 16h',
CURRENT_TIMESTAMP + INTERVAL '2y, 11mm, 28d, 16h, 15m, 14s, 222ms' = CURRENT_TIMESTAMP + INTERVAL '2y, 11mm, 28d, 16h, 15m, 14s, 222ms',
CURRENT_TIMESTAMP + INTERVAL '1y, 1mm, 3d' = CURRENT_TIMESTAMP + INTERVAL '13mm, 3d',
CURRENT_TIMESTAMP + INTERVAL '1y, 5mm' > CURRENT_TIMESTAMP + INTERVAL '2d, 16h';
Copy

ご存知のとおり、Snowflakeは算術演算のデータ型としててインターバルのみをサポートしています。そのため、比較を正しくサポートするために、各オペランドに CURRENT_TIMESTAMP 関数が追加されています。

既知の問題

1.算術演算のみがサポートされています

Snowflakeインターバルにはいくつかの制限があります。 DATE 、またはTIMESTAMP と[間隔定数](https://docs.snowflake.com/en/sql-reference/data-types-datetime.html#interval-constants)の間の算術演算のみがサポートされており、その他のシナリオはサポートされていません。

2.インターバルデータ型で符号を扱う

BigQuery では、年月に対応する部分文字列の前に記号(+ -)がある場合、それは年と月の両方に影響します。同様の方法で、時刻に対応する部分文字列にも適用されます。この場合、以下は時、分、秒に影響します。その例を以下に示します。

BigQuery
SELECT CURRENT_DATE + INTERVAL '-2-11 -28 -16:15:14.222' YEAR TO SECOND;
Copy
Snowflake
 SELECT CURRENT_DATE + INTERVAL '-2y, -11mm, -28d, -16h, -15m, -14s, -222ms';
Copy

関連 EWIs

  1. SSC-EWI-0036: データ型が別のデータ型に変換されました。

  2. SSC-EWI-0107: 現在のシナリオでは間隔リテラルはサポートされていません。

JSON

Jsonデータ型と使用法

説明

軽量データ交換形式である JSON を表します。詳細については、[BigQuery JSON データ型](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#json_typ)をご参照ください。

危険

JSON データ型はSnowflakeではサポートされておらず、現在は[VARIANT](https://docs.snowflake.com/en/sql-reference/data-types-semistructured#variant)に変換されます。


JSON リテラル

 JSON 'json_formatted_data'
Copy

詳細については、[JSON BigQuery のリテラル](https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#json_literals)をご参照ください。

これらのリテラルはSnowflakeではサポートされていませんが、代わりに[PARSE_JSON](https://docs.snowflake.com/en/sql-reference/functions/parse_json)関数を使用して入力式をJSON型に変換できます。唯一の注意点は、この関数はSnowflakeの値句では使用できないことで、このためサブクエリに変換されます。

サンプルソースパターン

BigQuery

CREATE OR REPLACE TABLE test.jsonType
(
  COL1 JSON
);

INSERT INTO test.jsonType
VALUES
  (JSON'{"name": "John", "age": 30, "city": "New York"}'), 
  (JSON'{"name": "Alice", "age": 28, "city": "San Francisco"}');  
  
SELECT * FROM test.jsonType;

SELECT JSON'{"name": "John", "age": 30, "city": "New York"}';
Copy

Snowflake

CREATE OR REPLACE TABLE test.jsonType
(
  COL1 VARIANT
);

INSERT INTO test.jsonType
SELECT
  PARSE_JSON('{"name": "John", "age": 30, "city": "New York"}')
UNION ALL
SELECT
  PARSE_JSON('{"name": "Alice", "age": 28, "city": "San Francisco"}');

SELECT * FROM test.jsonType;

SELECT
  PARSE_JSON('{"name": "John", "age": 30, "city": "New York"}');
Copy

STRUCT

BigQuery からSnowflakeへの STRUCT データ型の変換仕様。

説明

BigQuery では、それぞれ型(必須)とフィールド名(オプション)を持つ順序付けされたフィールドのコンテナが含まれます。[構造型](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#struct_typ)をご参照ください。

Snowflakeでは、[OBJECT_CONSTRUCT](https://docs.snowflake.com/en/sql-reference/functions/object_construct)を使用して STRUCT の動作をエミュレートでき、 SnowConvert AI がほとんどの実装の違いを処理します。

注釈

OBJECT_CONSTRUCT 内のキーを表す引数は、ターゲット STRUCT の元の名前である必要があります。STRUCT 式本体内で指定された名前は、ターゲットSTRUCT で見つかった名前に置き換えられます。以下のデータパターンの例のほとんどは、名前をターゲット名に置き換えた例を含んでいます。

サンプルソースパターン

BigQuery

CREATE OR REPLACE TABLE test.structTypes
(
    COL1 STRUCT<sc1 INT64>,
    COL2 STRUCT<sc2 STRING(10)>,
    COL3 STRUCT<sc3 STRUCT<sc31 INT64, sc32 INT64>>,
    COL4 STRUCT<sc4 ARRAY<INT64>>,
    COL5 STRUCT<sc5 INT64, sc51 INT64>,
    COL7 STRUCT<sc7 INT64 OPTIONS(description = "A repeated STRING field"), sc71 BOOL>,
    COL8 STRUCT<sc8 INT64 NOT NULL, sc81 BOOL NOT NULL OPTIONS(description = "A repeated STRING field")>
);
    
CREATE OR REPLACE TABLE test.tuple_sample (
  COL1 STRUCT<Key1 INT64, Key2 INT64>
);
Copy

Snowflake

CREATE OR REPLACE TABLE test.structTypes
(
    COL1 VARIANT /*** SSC-FDM-BQ0009 - STRUCT<INT> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
    COL2 VARIANT /*** SSC-FDM-BQ0009 - STRUCT<STRING(10)> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
    COL3 VARIANT /*** SSC-FDM-BQ0009 - STRUCT<STRUCT<INT64, INT64>> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
    COL4 VARIANT /*** SSC-FDM-BQ0009 - STRUCT<> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
    COL5 VARIANT /*** SSC-FDM-BQ0009 - STRUCT<INT, INT> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
    COL7 VARIANT /*** SSC-FDM-BQ0009 - STRUCT<INT, BOOLEAN> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/,
    COL8 VARIANT /*** SSC-FDM-BQ0009 - STRUCT<INT, BOOLEAN> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/
);

CREATE OR REPLACE TABLE test.tuple_sample (
  COL1 VARIANT /*** SSC-FDM-BQ0009 - STRUCT<INT, INT> CONVERTED TO VARIANT. SOME OF ITS USAGES MIGHT HAVE FUNCTIONAL DIFFERENCES. ***/
);
Copy

STRUCT 列に INT データ型を挿入する

BigQuery
INSERT INTO test.structTypes (COL1) VALUES
(STRUCT(1)), 
(STRUCT<INT64>(2)), 
(STRUCT<a INT64>(3)), 
(STRUCT<sc1 INT64>(4)), 
(STRUCT<sc1 INT64>(5));
Copy
Snowflake
INSERT INTO test.structTypes (COL1)
SELECT
    OBJECT_CONSTRUCT('sc1', 1 :: INT)
UNION ALL
SELECT
    OBJECT_CONSTRUCT('sc1', 2 :: INT)
UNION ALL
SELECT
    OBJECT_CONSTRUCT('sc1', 3 :: INT)
UNION ALL
SELECT
    OBJECT_CONSTRUCT('sc1', 4 :: INT)
UNION ALL
SELECT
    OBJECT_CONSTRUCT('sc1', 5 :: INT);
Copy

STRUCT 列に STRING データ型を挿入する

BigQuery
INSERT INTO test.structTypes (COL2) VALUES
(STRUCT('t1')), 
(STRUCT<STRING>('t2')), 
(STRUCT<sc2 STRING>('t3'));
Copy
Snowflake
INSERT INTO test.structTypes (COL2)
SELECT
    OBJECT_CONSTRUCT('sc2', 't1' :: STRING)
UNION ALL
SELECT
    OBJECT_CONSTRUCT('sc2', 't2' :: STRING)
UNION ALL
SELECT
    OBJECT_CONSTRUCT('sc2', 't3' :: STRING);
Copy

STRUCT 列に STRUCT データ型を挿入する

BigQuery
INSERT INTO test.structTypes (COL3) VALUES
(STRUCT(STRUCT(1,2))), 
(STRUCT<sc3 STRUCT<sc31 INT64, sc32 INT64>>(STRUCT<INT64, INT64>(3, 4))),
(STRUCT<sc3 STRUCT<sc31 INT64, sc32 INT64>>(STRUCT<sc31 INT64, sc32 INT64>(5, 6))),
(STRUCT<STRUCT<INT64,INT64>>(STRUCT<INT64, INT64>(7, 8))),
(STRUCT<STRUCT<INT64,INT64>>(STRUCT(9, 10)));
Copy
Snowflake
INSERT INTO test.structTypes (COL3)
SELECT
  OBJECT_CONSTRUCT('sc3', OBJECT_CONSTRUCT('sc31', 1 :: INT, 'sc32', 2 :: INT))
UNION ALL
SELECT
  OBJECT_CONSTRUCT('sc3', OBJECT_CONSTRUCT('sc31', 3 :: INT, 'sc32', 4 :: INT))
UNION ALL
SELECT
  OBJECT_CONSTRUCT('sc3', OBJECT_CONSTRUCT('sc31', 5 :: INT, 'sc32', 6 :: INT))
UNION ALL
SELECT
  OBJECT_CONSTRUCT('sc3', OBJECT_CONSTRUCT('sc31', 7 :: INT, 'sc32', 8 :: INT))
UNION ALL
SELECT
  OBJECT_CONSTRUCT('sc3', OBJECT_CONSTRUCT('sc31', 9 :: INT, 'sc32', 10 :: INT));
Copy

STRUCT 列に ARRAY データ型を挿入する

BigQuery
INSERT INTO test.structTypes (COL4) VALUES
(STRUCT([1,2,3,4])), 
(STRUCT<sc4 ARRAY<INT64>>(ARRAY[5,6,7])), 
(STRUCT<ARRAY<INT64>>([8,9,10,11]));
Copy
Snowflake
INSERT INTO test.structTypes (COL4)
SELECT
  OBJECT_CONSTRUCT('sc4', [1,2,3,4] :: ARRAY)
UNION ALL
SELECT
  OBJECT_CONSTRUCT('sc4', [5,6,7] :: ARRAY)
UNION ALL
SELECT
  OBJECT_CONSTRUCT('sc4', [8,9,10,11] :: ARRAY);
Copy

選択された STRUCT 列への挿入

BigQuery
INSERT INTO test.structTypes (COL7, COL8) VALUES
(STRUCT(1,true), STRUCT(2,false)), 
(STRUCT<INT64, BOOL>(3, false), STRUCT<INT64, BOOL>(4, false)), 
(STRUCT<a INT64, b BOOL>(5, true), STRUCT<a INT64, b BOOL>(6, true));
Copy
Snowflake
INSERT INTO test.structTypes (COL7, COL8)
SELECT
  OBJECT_CONSTRUCT('sc7', 1 :: INT, 'sc71', true),
  OBJECT_CONSTRUCT('sc8', 2 :: INT, 'sc81', false)
UNION ALL
SELECT
  OBJECT_CONSTRUCT('sc7', 3 :: INT, 'sc71', false),
  OBJECT_CONSTRUCT('sc8', 4 :: INT, 'sc81', false)
UNION ALL
SELECT
  OBJECT_CONSTRUCT('sc7', 5 :: INT, 'sc71', true),
  OBJECT_CONSTRUCT('sc8', 6 :: INT, 'sc81', true);
Copy

STRUCT 列タプル構文への挿入

警告

タプル構文値の変換は現在サポートされていません。

BigQuery
INSERT INTO test.tuple_sample
VALUES
  ((12, 34)),
  ((56, 78)),
  ((9, 99)),
  ((12, 35));
Copy
Snowflake
INSERT INTO test.tuple_sample
!!!RESOLVE EWI!!! /*** SSC-EWI-BQ0012 - UNABLE TO GENERATE CORRECT OBJECT_CONSTRUCT PARAMETER. SYMBOL INFORMATION COULD NOT BE COLLECTED. ***/!!!
VALUES
  ((12, 34)),
  ((56, 78)),
  ((9, 99)),
  ((12, 35));
Copy



STRUCT 列の更新

BigQuery
UPDATE test.structTypes
SET col1 = STRUCT(100 AS number)
WHERE col1.sc1 = 4;
Copy
Snowflake
UPDATE test.structTypes
    SET col1 = OBJECT_CONSTRUCT('sc1', 100 :: INT)
WHERE col1:sc1 = 4;
Copy

STRUCT 列フィールドの更新

BigQuery
UPDATE test.structTypes
SET col3 = STRUCT(STRUCT(80,90))
WHERE col3.sc3.sc31 = 20;
Copy
Snowflake
UPDATE test.structTypes
SET col3 = OBJECT_CONSTRUCT('sc3', OBJECT_CONSTRUCT('sc31', 80 :: INT, 'sc32', 90 :: INT))
WHERE col3:sc3:sc31 = 20;
Copy

STRUCT 列から選択

BigQuery
SELECT COL3.sc3 FROM test.structTypes;
SELECT COL3.sc3.sc32 FROM test.structTypes;
SELECT COL4.sc4 FROM test.structTypes WHERE COL4.sc4 IS NOT NULL;
Copy
Snowflake
SELECT COL3:sc3
FROM
test.structTypes;
SELECT COL3:sc3:sc32
FROM
test.structTypes;
SELECT COL4:sc4
FROM
test.structTypes
WHERE COL4:sc4 IS NOT NULL;
Copy

STRUCT 列タプルの構文から選択

BigQuery
SELECT *
FROM test.tuple_sample
WHERE (COL1.Key1, COL1.Key2) IN ((12, 34), (56, 78));

SELECT STRUCT<x ARRAY<INT64>, y INT64>(COL4.sc4, COL1.sc1)
FROM test.structTypes
WHERE COL1.sc1 IS NOT NULL;
Copy
Snowflake
SELECT *
FROM
test.tuple_sample
WHERE (COL1:Key1, COL1:Key2) IN ((12, 34), (56, 78));

SELECT
OBJECT_CONSTRUCT('x', COL4:sc4 :: ARRAY, 'y', COL1:sc1 :: INT)
FROM
test.structTypes
WHERE COL1:sc1 IS NOT  NULL;
Copy

匿名 STRUCT 定義を使用してビューを作成する

BigQuery
CREATE OR REPLACE TABLE project-test.mydataset.sourcetable (
  id STRING,
  payload JSON
);

CREATE VIEW project-test.mydataset.myview AS 
SELECT
  id,
  STRUCT(
    payload.user_id AS user_id,
    STRUCT(
      JSON_VALUE(payload, '$.details.ip_address') AS ip_address,
      JSON_VALUE(payload, '$.details.item_id') AS item_id,
      SAFE_CAST(JSON_VALUE(payload, '$.details.quantity') AS INT64) AS quantity,
      SAFE_CAST(JSON_VALUE(payload, '$.details.price') AS FLOAT64) AS price,
      JSON_VALUE(payload, '$.details.text') AS text
    ) AS details
  ) AS structured_payload
  FROM project-test.mydataset.sourcetable;
Copy
Snowflake
CREATE OR REPLACE TABLE "project-test".mydataset.sourcetable (
  id STRING,
  payload VARIANT
);

CREATE VIEW "project-test".mydataset.myview
AS
SELECT
  id,
  OBJECT_CONSTRUCT('user_id',
  payload:user_id, 'details', OBJECT_CONSTRUCT('ip_address', JSON_EXTRACT_PATH_TEXT(payload, 'details.ip_address'), 'item_id', JSON_EXTRACT_PATH_TEXT(payload, 'details.item_id'), 'quantity', TRY_CAST(JSON_EXTRACT_PATH_TEXT(payload, 'details.quantity') AS INT), 'price', TRY_CAST(JSON_EXTRACT_PATH_TEXT(payload, 'details.price') AS FLOAT), 'text', JSON_EXTRACT_PATH_TEXT(payload, 'details.text'))) AS structured_payload
  FROM
  "project-test".mydataset.sourcetable;
Copy

STRUCT 列比較式

BigQuery 構造体の比較演算では、キーが存在する場合はそれを無視して値同士を比較します。一方、Snowflakeのオブジェクトの比較演算では、値とキーの両方を比較します。このため、比較によっては異なる結果を返すことがあります。

BigQuery
SELECT * FROM test.structTypes WHERE COL1 NOT IN (COL2);
SELECT * FROM test.structTypes WHERE COL1 <> (COL2);
SELECT * FROM test.structTypes WHERE COL1 != (COL2);
Copy
Snowflake
SELECT * FROM
test.structTypes
--** SSC-FDM-BQ0008 - WHERE CLAUSE REFERENCES A COLUMN OF STRUCT TYPE. COMPARISON OPERATIONS MAY PRODUCE DIFFERENT RESULTS IN SNOWFLAKE. **
WHERE COL1 NOT IN (COL2);
SELECT * FROM
test.structTypes
--** SSC-FDM-BQ0008 - WHERE CLAUSE REFERENCES A COLUMN OF STRUCT TYPE. COMPARISON OPERATIONS MAY PRODUCE DIFFERENT RESULTS IN SNOWFLAKE. **
WHERE COL1 <> (COL2);
SELECT * FROM
test.structTypes
--** SSC-FDM-BQ0008 - WHERE CLAUSE REFERENCES A COLUMN OF STRUCT TYPE. COMPARISON OPERATIONS MAY PRODUCE DIFFERENT RESULTS IN SNOWFLAKE. **
WHERE COL1 != (COL2);
Copy

関連 EWIs

  1. [SSC-FDM-BQ0010](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/bigqueryFDM.md#ssc-fdm-bq0010):構造体が VARIANT に変換されました。使用方法によっては機能上の違いがある場合があります。

  2. [SSC-EWI-BQ0012](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/bigqueryEWI.md#ssc-ewi-bq0012):正しい OBJECT_CONSTRUCT パラメーターを生成できません。

  3. [SSC-FDM-BQ0008](../../general/technical-documentation/issues-and-troubleshooting/functional-difference/bigqueryFDM.md#ssc-fdm-bq0008):Where句は STRUCT 型の列を参照します。

TIMESTAMP

タイムスタンプのデータ型と使用法

説明

タイムスタンプ値は、タイムゾーンや夏時間( DST )などの規則に依存せず、マイクロ秒単位の精度で絶対的な時点を表します。詳細については、[BigQuery タイムスタンプデータ型](https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#timestamp_type)をご参照ください。

文法構文

NameRange
TIMESTAMP0001-01-01 00:00:00 to 9999-12-31 23:59:59.999999 UTC

Success

TIMESTAMP データ型は現在[TIMESTAMP_TZ](https://docs.snowflake.com/en/sql-reference/data-types-datetime#timestamp-ltz-timestamp-ntz-timestamp-t)に変換されています。

BigQuery は TIMESTAMP データを協定世界時( UTC )で保存することに注意してください。

サンプルソースパターン

時刻なしの TIMESTAMP

BigQuery
 CREATE OR REPLACE TABLE timestampTable
(
  COL1 TIMESTAMP
);

INSERT INTO timestampTable VALUES ('2008-12-26 15:30:00');
INSERT INTO timestampTable VALUES (TIMESTAMP'2008-12-27 18:30:00');
SELECT * FROM timestampTable;
Copy
結果
2008-12-26 15:30:00 UTC
2008-12-27 18:30:00 UTC

Copy
Snowflake
CREATE OR REPLACE TABLE timestampTable
(
  COL1 TIMESTAMP_TZ
);

INSERT INTO timestampTable VALUES ('2008-12-26 15:30:00');
INSERT INTO timestampTable VALUES (TIMESTAMP'2008-12-27 18:30:00');
SELECT * FROM timestampTable;
Copy
結果
2008-12-26 15:30:00.000 -0800
2008-12-27 18:30:00.000 -0800

Copy

タイムゾーンのある TIMESTAMP

タイムゾーンが定義されたら、[CONVERT_TIMEZONE](https://docs.snowflake.com/en/sql-reference/functions/convert_timezone)関数を使用してデータを協定世界時( UTC )で保存する必要があります。また、タイムスタンプリテラル内のタイムゾーン名はSnowflakeではサポートされていないため、その場合はこの関数も使用する必要があります。

BigQuery
CREATE OR REPLACE TABLE test.timestampType
(
  COL1 TIMESTAMP
);

INSERT INTO test.timestampType VALUES ('2008-12-25 15:30:00 America/Chicago');
INSERT INTO test.timestampType VALUES ('2018-04-05 12:00:00+02:00');
INSERT INTO test.timestampType VALUES ('2008-12-26 15:30:00-08:00');
INSERT INTO test.timestampType VALUES (TIMESTAMP'2022-12-25 15:30:00 America/North_Dakota/New_Salem');
INSERT INTO test.timestampType VALUES (TIMESTAMP'2022-04-05 12:00:00+02:00');
INSERT INTO test.timestampType VALUES (TIMESTAMP'2022-12-26 15:30:00-08:00');
SELECT * FROM test.timestampType ORDER BY COL1;
Copy
結果
2008-12-25 21:30:00 UTC	
2008-12-26 23:30:00 UTC	
2018-04-05 10:00:00 UTC	
2022-04-05 10:00:00 UTC	
2022-12-25 21:30:00 UTC	
2022-12-26 23:30:00 UTC
Copy
Snowflake
CREATE OR REPLACE TABLE test.timestampType
(
  COL1 TIMESTAMP_TZ
);

INSERT INTO test.timestampType
VALUES (CONVERT_TIMEZONE('America/Chicago', 'UTC', '2008-12-25 15:30:00'));
INSERT INTO test.timestampType
VALUES (CONVERT_TIMEZONE('UTC','2018-04-05 12:00:00+02:00'));
INSERT INTO test.timestampType
VALUES (CONVERT_TIMEZONE('UTC','2008-12-26 15:30:00-08:00'));

INSERT INTO test.timestampType
VALUES (CONVERT_TIMEZONE('America/North_Dakota/New_Salem', 'UTC', '2022-12-25 15:30:00'));
INSERT INTO test.timestampType
VALUES (CONVERT_TIMEZONE('UTC', '2022-04-05 12:00:00+02:00'));
INSERT INTO test.timestampType
VALUES (CONVERT_TIMEZONE('UTC', '2022-12-26 15:30:00-08:00'));
SELECT * FROM test.timestampType ORDER BY COL1;
Copy
結果
 2008-12-25 21:30:00.000 -0800
2008-12-26 23:30:00.000 +0000
2018-04-05 10:00:00.000 +0000
2022-04-05 10:00:00.000 +0000
2022-12-25 21:30:00.000 -0800
2022-12-26 23:30:00.000 +0000
Copy