IBM Netezza SQL 変換ガイド

IBM Netezza データ ウェアハウジングは、Netezza 固有の SQL 構文で動作するように設計されています。Netezza SQL は、Postgres 7.2 に基づいています。Netezza 用に作成された SQL スクリプトは、SQL 言語に違いがあるため、そのままでは BigQuery データ ウェアハウスで使用できません。

このドキュメントでは、次の分野での Netezza と BigQuery の SQL 構文の類似点と相違点について、詳しく説明します。

  • データ型
  • SQL 言語要素
  • クエリ構文
  • データ操作言語(DML)
  • データ定義言語(DDL)
  • ストアド プロシージャ
  • 関数

また、バッチ SQL 変換を使用して複数の SQL スクリプトを一括で移行することも、インタラクティブ SQL 変換を使用してアドホック クエリ変換することもできます。IBM Netezza SQL/NZPLSQL は、プレビューの両方のツールでサポートされています。

データ型

Netezza BigQuery
INTEGER/INT/INT4 INT64
SMALLINT/INT2 INT64
BYTEINT/INT1 INT64
BIGINT/INT8 INT64
DECIMAL NUMERIC Netezza の DECIMAL データ型は、NUMERIC データ型のエイリアスです。
NUMERIC NUMERIC INT64
NUMERIC(p,s) NUMERIC BigQuery の NUMERIC 型は、Netezza のようにカスタムの精度または位取り(制約)を適用できません。BigQuery では小数点以下 9 桁で固定されていますが、Netezza ではカスタム設定が可能です。Netezza では、精度 p として可能な範囲は 1~38、スケール s は 0~精度です。
FLOAT(p) FLOAT64
REAL/FLOAT(6) FLOAT64
DOUBLE PRECISION/FLOAT(14) FLOAT64
CHAR/CHARACTER STRING BigQuery の STRING 型は可変長であり、Netezza の CHARACTER および VARCHAR 型で必要なように最大文字列長を手動で設定する必要はありません。CHAR(n)n のデフォルト値は 1 です。最大文字列サイズは 64,000 文字です。
VARCHAR STRING BigQuery の STRING 型は可変長であり、Netezza の CHARACTER および VARCHAR 型で必要なように最大文字列長を手動で設定する必要はありません。最大文字列サイズは 64,000 文字です。
NCHAR STRING BigQuery の STRING 型は、可変長の UTF-8 エンコードされた Unicode として保存されます。最大長は 16,000 文字です。
NVARCHAR STRING BigQuery の STRING 型は、可変長の UTF-8 エンコードされた Unicode として保存されます。最大長は 16,000 文字です。
VARBINARY BYTES
ST_GEOMETRY GEOGRAPHY
BOOLEAN/BOOL BOOL BigQuery の BOOL 型は TRUE/FALSE のみを取ります。これは、0/1yes/notrue/false,on/off などさまざまな値を受け入れる Netezza の BOOL 型とは異なります。
DATE DATE
TIME TIME
TIMETZ/TIME WITH TIME ZONE TIME Netezza は TIME データ型を UTC で格納し、WITH TIME ZONE 構文を使用して UTC からのオフセットを渡すことができます。BigQuery の TIME データ型は、日付やタイムゾーンに依存しない時間を表します。
TIMESTAMP DATETIME Netezza TIMESTAMP 型には、BigQuery の DATETIME 型と同様に、タイムゾーンが含まれません。
ARRAY Netezza には配列データ型はありません。配列型は varchar フィールドに格納されます。

タイムスタンプと日付型形式

Netezza SQL で使用される日付型の形式の詳細については、Netezza の日時テンプレート パターンのドキュメントをご覧ください。日付と時刻の関数の詳細については、Netezza の日付/時間関数のドキュメントをご覧ください。

日付型形式要素を Netezza から GoogleSQL に変換する場合は、次の表に記載されているように、TIMESTAMPDATETIME のタイムゾーンの違いに特に注意を払う必要があります。

Netezza BigQuery
CURRENT_TIMESTAMP
CURRENT_TIME

Netezza の TIME 情報には、WITH TIME ZONE 構文を使用して定義される異なるタイムゾーン情報が含まれることがあります。
可能であれば、正しい形式の CURRENT_TIMESTAMP 関数を使用してください。ただし、出力形式では UTC タイムゾーンが常に表示されるとは限りません(BigQuery にはタイムゾーンがありません)。bq コマンドライン ツールと Google Cloud コンソールの DATETIME オブジェクトは、RFC 3339 に従って T 区切り文字を使用して形式設定されます。ただし Python と Java JDBC では、区切り文字にスペースが使用されます。日付形式を正しく定義するには、FORMAT_DATETIME 関数を明示的に使用します。それ以外の場合は、次のように文字列に明示的にキャストします。
CAST(CURRENT_DATETIME() AS STRING)
これにより、スペース区切り文字も返されます。
CURRENT_DATE CURRENT_DATE
CURRENT_DATE-3 BigQuery は算術データ演算をサポートしていません。代わりに DATE_ADD 関数を使用してください。

SELECT ステートメント

通常、Netezza の SELECT ステートメントは BigQuery と互換性があります。次の表に、例外の一覧を示します。

Netezza BigQuery
FROM 句のない SELECT ステートメント 次のような特殊なケースに対応します。

SELECT 1 UNION ALL SELECT 2;


SELECT
  (subquery) AS flag,
  CASE WHEN flag = 1 THEN ...

BigQuery では、列は同じクエリ内で定義された他の列の出力を参照できません。ロジックを複製するか、ネストされたクエリにロジックを移動する必要があります。

オプション 1


SELECT
  (subquery) AS flag,
  CASE WHEN (subquery) = 1 THEN ...

オプション 2


SELECT
  q.*,
  CASE WHEN flag = 1 THEN ...
FROM (
  SELECT
    (subquery) AS flag,
    ...
  ) AS q

比較演算子

Netezza BigQuery 説明
exp = exp2 exp = exp2 等しい
exp <= exp2 exp <= exp2 以下
exp < exp2 exp < exp2 次より小さい
exp <> exp2
exp != exp2
exp <> exp2
exp != exp2
等しくない
exp >= exp2 exp >= exp2 以上
exp > exp2 exp > exp2 次より大きい

組み込み SQL 関数

Netezza BigQuery 説明
CURRENT_DATE CURRENT_DATE 現在の日付(年、月、日)を取得します。
CURRENT_TIME CURRENT_TIME 小数を含む現在の時刻を取得します。
CURRENT_TIMESTAMP CURRENT_TIMESTAMP 現在のシステム日時を秒単位で取得します。
NOW CURRENT_TIMESTAMP 現在のシステム日時を秒単位で取得します。
COALESCE(exp, 0) COALESCE(exp, 0) NULL をゼロに置き換えます。
NVL(exp, 0) IFNULL(exp, 0) NULL をゼロに置き換えます。
EXTRACT(DOY FROM timestamp_expression) EXTRACT(DAYOFYEAR FROM timestamp_expression) 年初からの日数を返します。
ADD_MONTHS(date_expr, num_expr) DATE_ADD(date, INTERVAL k MONTH) 日付に月を追加します。
DURATION_ADD(date, k) DATE_ADD(date, INTERVAL k DAY) 日付に対する加算を実行します。
DURATION_SUBTRACT(date, k) DATE_SUB(date, INTERVAL k DAY) 日付に対する減算を実行します。
str1 || str2 CONCAT(str1, str2) 文字列を連結します。

関数

このセクションでは、Netezza と BigQuery の関数を比較します。

集計関数

Netezza BigQuery
ANY_VALUE
APPROX_COUNT_DISTINCT
APPROX_QUANTILES
APPROX_TOP_COUNT
APPROX_TOP_SUM
AVG AVG
intNand BIT_AND
intNnot ビット NOT 演算子: ~
intNor BIT_OR
intNxor BIT_XOR
intNshl
intNshr
CORR CORR
COUNT COUNT
COUNTIF
COVAR_POP COVAR_POP
COVAR_SAMP COVAR_SAMP
GROUPING
LOGICAL_AND
LOGICAL_OR
MAX MAX
MIN MIN
MEDIAN PERCENTILE_CONT(x, 0.5)
STDDEV_POP STDDEV_POP
STDDEV_SAMP STDDEV_SAMP
STDDEV
STRING_AGG
SUM SUM
VAR_POP VAR_POP
VAR_SAMP VAR_SAMP
VARIANCE

分析関数

Netezza BigQuery
ANY_VALUE
ARRAY_AGG
ARRAY_CONCAT ARRAY_CONCAT_AGG
ARRAY_COMBINE
ARRAY_COUNT
ARRAY_SPLIT
ARRAY_TYPE
AVG AVG
intNand BIT_AND
intNnot ビット NOT 演算子: ~
intNor BIT_OR
intNxor BIT_XOR
intNshl
intNshr
CORR CORR
COUNT COUNT
COUNTIF
COVAR_POP COVAR_POP
COVAR_SAMP COVAR_SAMP
CUME_DIST CUME_DIST
DENSE_RANK DENSE_RANK
FIRST_VALUE FIRST_VALUE
LAG LAG
LAST_VALUE LAST_VALUE
LEAD LEAD
AND LOGICAL_AND
OR LOGICAL_OR
MAX MAX
MIN MIN
NTH_VALUE
NTILE NTILE
PERCENT_RANK PERCENT_RANK
PERCENTILE_CONT PERCENTILE_CONT
PERCENTILE_DISC PERCENTILE_DISC
RANK RANK
ROW_NUMBER ROW_NUMBER
STDDEV STDDEV
STDDEV_POP STDDEV_POP
STDDEV_SAMP STDDEV_SAMP
STRING_AGG
SUM SUM
VARIANCE VARIANCE
VAR_POP VAR_POP
VAR_SAMP VAR_SAMP
VARIANCE
WIDTH_BUCKET

日付と時刻の関数

Netezza BigQuery
ADD_MONTHS DATE_ADD
TIMESTAMP_ADD
AGE
CURRENT_DATE CURRENT_DATE
CURRENT_DATETIME
CURRENT_TIME CURRENT_TIME
CURRENT_TIME(p)
CURRENT_TIMESTAMP CURRENT_TIMESTAMP
CURRENT_TIMESTAMP(p)
DATE
DATE_ADD
DATE_DIFF
DATE_FROM_UNIX_DATE
DATE_SUB
DATE_TRUNC DATE_TRUNC
DATE_PART
DATETIME
DATETIME_ADD
DATETIME_DIFF
DATETIME_SUB
DATETIME_TRUNC
DURATION_ADD
DURATION_SUBTRACT
EXTRACT EXTRACT (DATE)
EXTRACT (TIMESTAMP)
FORMAT_DATE
FORMAT_DATETIME
FORMAT_TIME
FORMAT_TIMESTAMP
LAST_DAY DATE_SUB( DATE_TRUNC( DATE_ADD( date_expression, INTERVAL 1 MONTH ), MONTH ), INTERVAL 1 DAY )
MONTHS_BETWEEN DATE_DIFF(date_expression, date_expression, MONTH)
NEXT_DAY
NOW
OVERLAPS
PARSE_DATE
PARSE_DATETIME
PARSE_TIME
PARSE_TIMESTAMP
STRING
TIME
TIME_ADD
TIME_DIFF
TIME_SUB
TIME_TRUNC
TIMEOFDAY
TIMESTAMP DATETIME
TIMESTAMP_ADD
TIMESTAMP_DIFF
TIMESTAMP_MICROS
TIMESTAMP_MILLIS
TIMESTAMP_SECONDS
TIMESTAMP_SUB
TIMESTAMP_TRUNC
TIMEZONE
TO_DATE PARSE_DATE
TO_TIMESTAMP PARSE_TIMESTAMP
UNIX_DATE
UNIX_MICROS
UNIX_MILLIS
UNIX_SECONDS

文字列関数

Netezza BigQuery
ASCII TO_CODE_POINTS(string_expr)[OFFSET(0)]
BYTE_LENGTH
TO_HEX
CHAR_LENGTH
CHARACTER_LENGTH
CODE_POINTS_TO_BYTES
BTRIM
CHR CODE_POINTS_TO_STRING([numeric_expr])
CONCAT
DBL_MP
DLE_DST
ENDS_WITH
FORMAT
FROM_BASE32
FROM_BASE64
FROM_HEX
HEX_TO_BINARY
HEX_TO_GEOMETRY
INITCAP
INSTR
INT_TO_STRING
LE_DST
LENGTH LENGTH
LOWER LOWER
LPAD LPAD
LTRIM LTRIM
NORMALIZE
NORMALIZE_AND_CASEFOLD
PRI_MP
REGEXP_CONTAINS
REGEXP_EXTRACT REGEXP_EXTRACT
REGEXP_EXTRACT_ALL REGEXP_EXTRACT_ALL
REGEXP_EXTRACT_ALL_SP
REGEXP_EXTRACT_SP
REGEXP_INSTR STRPOS(col, REGEXP_EXTRACT())
REGEXP_LIKE
REGEXP_MATCH_COUNT
REGEXP_REPLACE REGEXP_REPLACE
REGEXP_REPLACE_SP IF(REGEXP_CONTAINS,1,0)
REGEXP_EXTRACT
REPEAT REPEAT
REPLACE
REVERSE
RPAD RPAD
RTRIM RTRIM
SAFE_CONVERT_BYTES_TO_STRING
SCORE_MP
SEC_MP
SOUNDEX
SPLIT
STARTS_WITH
STRING_TO_INT
STRPOS STRPOS
SUBSTR SUBSTR
TO_BASE32
TO_BASE64
TO_CHAR
TO_DATE
TO_NUMBER
TO_TIMESTAMP
TO_CODE_POINTS
TO_HEX
TRANSLATE
TRIM
UPPER UPPER
UNICODE
UNICODES

数学関数

Netezza BigQuery
ABS ABS
ACOS ACOS
ACOSH
ASIN ASIN
ASINH
ATAN ATAN
ATAN2 ATAN2
ATANH
CEIL
DCEIL
CEIL
CEILING
COS COS
COSH
COT COT
DEGREES
DIV
EXP EXP
FLOOR
DFLOOR
FLOOR
GREATEST GREATEST
IEEE_DIVIDE
IS_INF
IS_NAN
LEAST LEAST
LN LN
LOG LOG
LOG10
MOD MOD
NULLIF(expr, 0)
PI ACOS(-1)
POW
FPOW
POWER
POW
RADIANS
RANDOM RAND
ROUND ROUND
SAFE_DIVIDE
SETSEED
SIGN SIGN
SIN SIN
SINH
SQRT
NUMERIC_SQRT
SQRT
TAN TAN
TANH
TRUNC TRUNC
IFNULL(expr, 0)

DML 構文

このセクションでは、Netezza と BigQuery の DML 構文を比較します。

INSERT ステートメント

Netezza BigQuery


INSERT INTO table VALUES (...);


INSERT INTO table (...) VALUES (...);


Netezza には、列に関する DEFAULT キーワードとその他の制約があります。BigQuery では、すべての列が指定される場合に限り、INSERT ステートメントでの列名の省略が許可されます。


INSERT INTO table (...) VALUES (...);
INSERT INTO table (...) VALUES (...);


INSERT INTO table VALUES (), ();

BigQuery では、1 日に実行できる DML ステートメント数を制限する DML 割り当てが適用されます。割り当てを最大限に利用するには、次の方法を検討してください。

  • INSERT ステートメントごとに 1 行ではなく、1 つの INSERT ステートメントで複数の行を組み合わせる。
  • MERGE ステートメントを使用して、複数の DML ステートメント(INSERT ステートメントを含む)を組み合わせる。
  • CREATE TABLE ... AS SELECT ステートメントを使用して、新しいテーブルを作成してデータを入力する。

BigQuery の DML スクリプトは、それに対応する Netezza のステートメントとは整合性セマンティクスが少し異なります。また、BigQuery では NOT NULL 以外の制約がないことにも注意してください。

スナップショット分離と、セッションとトランザクションの処理の概要については、整合性の保証とトランザクション分離をご覧ください。

UPDATE ステートメント

Netezza では WHERE 句は省略可能ですが、BigQuery では必須です。

Netezza BigQuery


UPDATE tbl
SET
tbl.col1=val1;

WHERE 句がない場合はサポートされません。すべての行を更新するには WHERE true 句を使用します。


UPDATE A
SET
  y = B.y,
  z = B.z + 1
FROM B
WHERE A.x = B.x
  AND A.y IS NULL;


UPDATE A
SET
  y = B.y,
  z = B.z + 1
FROM B
WHERE A.x = B.x
  AND A.y IS NULL;


UPDATE A alias
SET x = x + 1
WHERE f(x) IN (0, 1)


UPDATE A
SET x = x + 1
WHERE f(x) IN (0, 1);


UPDATE A
SET z = B.z
FROM B
WHERE A.x = B.x
  AND A.y = B.y


UPDATE A
SET z = B.z
FROM B
WHERE A.x = B.x
  AND A.y = B.y;

例については、UPDATE の例をご覧ください。

DML 割り当てがあるため、複数の個々の UPDATE ステートメントと INSERT ステートメントではなく、サイズの大きい MERGE ステートメントを使用することをおすすめします。BigQuery の DML スクリプトは、それに対応する Netezza のステートメントとは整合性セマンティクスが少し異なります。スナップショット分離と、セッションとトランザクションの処理の概要については、整合性の保証とトランザクション分離をご覧ください。

DELETE および TRUNCATE ステートメント

DELETE ステートメントと TRUNCATE ステートメントはいずれも、テーブルのスキーマやインデックスに影響を与えることなくテーブルから行を削除できます。TRUNCATE ステートメントの効果は DELETE ステートメントと同じですが、大規模なテーブルの場合、DELETE ステートメントよりもはるかに高速です。TRUNCATE ステートメントは Netezza ではサポートされていますが、BigQuery ではサポートされていません。ただし DELETE ステートメントは Netezza と BigQuery の両方で使用できます。

BigQuery では、DELETE ステートメントには WHERE 句が必要です。Netezza では、WHERE 句は省略可能です。WHERE 句が指定されていない場合、Netezza テーブル内のすべての行が削除されます。

Netezza BigQuery 説明


BEGIN;
LOCK TABLE A IN EXCLUSIVE MODE;
DELETE FROM A;
INSERT INTO A SELECT * FROM B;
COMMIT;

テーブルのコンテンツをクエリ出力で置き換える処理は、トランザクションに相当します。これは、query クエリまたはコピー(cp オペレーションで実行できます。


bq query \
--replace \
--destination_table \
tableA \
'SELECT * \
FROM tableB \
WHERE ...'


bq cp \
-f tableA tableB

テーブルの内容をクエリの結果に置換します。


DELETE FROM database.table


DELETE FROM table WHERE TRUE;

Vertica では、delete ステートメントが実行されたとき、行が物理的に削除されるのではなく単に削除対象のマークが付けられるだけです。後で GROOM TABLE または nzreclaim コマンドを実行すると、削除対象マークが付けられた行が削除され、対応するディスク容量が再利用されます。
GROOM TABLE Netezza では、GROOM TABLE コマンドを使用して、削除対象マークが付いた行を削除することで、ディスク容量を再利用します。

MERGE ステートメント

MERGE ステートメントでは、ターゲット行ごとに最大で 1 つのソース行を対応させる必要があります。BigQuery の DML スクリプトは、それに対応する Netezza のステートメントとは整合性セマンティクスが少し異なります。スナップショット分離と、セッションとトランザクションの処理の概要については、整合性の保証とトランザクション分離をご覧ください。例については、BigQuery の MERGE の例Netezza の MERGE の例をご覧ください。

DDL 構文

このセクションでは、Netezza と BigQuery の DDL 構文を比較します。

CREATE TABLE ステートメント

Netezza BigQuery 説明
TEMP
TEMPORARY
BigQuery では DDL がサポートされているので、クエリの結果からテーブルを作成でき、作成時にテーブルの有効期限を指定できます。たとえば、3 日間の場合は次のようになります。

CREATE TABLE 'fh-bigquery.public_dump.vtemp'
OPTIONS(
expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(),
INTERVAL 3 DAY))
セッションに対して一時的なテーブルを作成します。
ZONE MAPS サポート対象外。 WHERE 条件のクイック検索を行います。
DISTRIBUTE ON PARTITION BY パーティショニング。これは直接変換ではありません。DISTRIBUTE ON では、通常は均等分散のために一意のキーを指定してノード間でデータを共有します。PARTITION BY はデータをセグメントにプルーニングします。
ORGANIZE ON CLUSTER BY Netezza と BigQuery の両方で、クラスタリング用に最大 4 つのキーがサポートされています。Netezza クラスタ基本テーブル(CBT)では、各クラスタリング列の優先度が同等になります。BigQuery では、テーブルがクラスタ化される最初の列が優先され、次に 2 番目の列が優先されます。
ROW SECURITY Authorized View 行レベルのセキュリティ
CONSTRAINT サポート対象外 チェック制約。

DROP ステートメント

Netezza BigQuery 説明
DROP TABLE DROP TABLE
DROP DATABASE DROP DATABASE
DROP VIEW DROP VIEW

列のオプションと属性

Netezza BigQuery 説明
NULL
NOT NULL
NULLABLE
REQUIRED
列に NULL 値を含めることを許可するかどうかを指定します。
REFERENCES サポート対象外 列の制約を指定します。
UNIQUE サポート対象外 列内の各値を一意にする必要があります。
DEFAULT サポート対象外 列内のすべての値のデフォルト値。

一時テーブル

Netezza では、セッション中に存在する TEMPORARY テーブルがサポートされています。

BigQuery で一時テーブルを作成する手順は次のとおりです。

  1. 有効期間が短い(12 時間など)データセットを作成します。
  2. このデータセット内に一時テーブルを作成します。テーブル名の接頭辞は temp にします。たとえば、有効期限が 1 時間のテーブルを作成するには、次のようにします。

    CREATE TABLE temp.name (col1, col2, ...)
    OPTIONS(expiration_timestamp = TIMESTAMP_ADD(CURRENT_TIMESTAMP(),
    INTERVAL 1 HOUR));
    
  3. 一時テーブルでの読み取りと書き込みを開始します。

ダウンストリーム システムのエラーを確認するために、重複を個別に削除することもできます。

BigQuery では DEFAULT 列と IDENTITY(シーケンス)列はサポートされていません。

手続き型 SQL ステートメント

Netezza では、NZPLSQL スクリプト言語を使用してストアド プロシージャを記述します。NZPLSQL は Postgres の PL/pgSQL 言語をベースとしています。ここでは、ストアド プロシージャ、関数、トリガーで使用される手続き型 SQL ステートメントを Netezza から BigQuery に変換する方法について説明します。

CREATE PROCEDURE ステートメント

Netezza と BigQuery のいずれでも、CREATE PROCEDURE ステートメントを使用したストアド プロシージャの作成がサポートされています。詳細については、SQL ストアド プロシージャを操作するをご覧ください。

変数宣言と割り当て

Netezza BigQuery 説明
DECLARE var datatype(len) [DEFAULT value]; DECLARE 変数を宣言します。
SET var = value; SET 変数に値を代入します。

例外ハンドラ

Netezza では、特定のエラー状態に対してトリガーできる例外ハンドラがサポートされています。BigQuery では条件ハンドラはサポートされていません。

Netezza BigQuery 説明
EXCEPTION サポート対象外 一般的なエラーについては SQL 例外ハンドラを宣言します。

動的 SQL ステートメント

Netezza では、ストアド プロシージャ内の動的 SQL クエリがサポートされています。BigQuery では動的 SQL ステートメントがサポートされていません。

Netezza BigQuery 説明
EXECUTE IMMEDIATE sql_str; EXECUTE IMMEDIATE sql_str; 動的 SQL を実行します。

フロー制御ステートメント

Netezza BigQuery 説明
IF THEN ELSE STATEMENT
IF 条件
THEN ...
ELSE ...
END IF;
IF 条件
THEN ...
ELSE ...
END IF;
条件に基づいて実行します。
反復制御
FOR var AS SELECT ...
DO stmts END FOR;
FOR var AS cur CURSOR
FOR SELECT ...
DO stmts END FOR;
サポート対象外 行のコレクションを反復処理します。
反復制御
LOOP stmts END LOOP;
LOOP
sql_statement_list END LOOP;
ステートメントのブロックをループします。
EXIT WHEN BREAK プロシージャを終了します。
WHILE *condition* LOOP WHILE 条件
DO ...
END WHILE
while 条件が失敗するまで、ステートメントのループを実行します。

その他のステートメントと手続き型言語要素

Netezza BigQuery 説明
CALL proc(param,...) サポート対象外 プロシージャを実行します。
EXEC proc(param,...) サポート対象外 プロシージャを実行します。
EXECUTE proc(param,...) サポート対象外 プロシージャを実行します。

複数ステートメントおよび複数行 SQL ステートメント

Netezza と BigQuery はどちらもトランザクション(セッション)をサポートしているため、一貫して一緒に実行されるステートメントをセミコロンで区切って指定できます。詳細については、複数ステートメント トランザクションをご覧ください。

その他の SQL ステートメント

Netezza BigQuery 説明
GENERATE STATISTICS 現在のデータベース内のすべてのテーブルに関する統計情報を生成します。
GENERATE STATISTICS ON table_name 特定のテーブルに関する統計情報を生成します。
GENERATE STATISTICS ON table_name(col1,col4) MIN, MAX, AVG, などの統計関数、UI、または Cloud Data Loss Prevention API を使用します。 テーブル内の特定の列に関する統計情報を生成します。
GENERATE STATISTICS ON table_name APPROX_COUNT_DISTINCT(col) 列の一意の値の数を示します。
INSERT INTO table_name INSERT INTO table_name 行を挿入します。
LOCK TABLE table_name FOR EXCLUSIVE; サポート対象外 行をロックします。
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL ... BigQuery では、常にスナップショット分離を使用します。詳細については、整合性の保証とトランザクション分離をご覧ください。 トランザクション分離レベルを定義します。
BEGIN TRANSACTION
END TRANSACTION
COMMIT
BigQuery では、常にスナップショット分離を使用します。詳細については、整合性の保証とトランザクション分離をご覧ください。 マルチステートメント リクエストのトランザクション境界を定義します。
EXPLAIN ... サポート対象外。クエリプランとタイムラインの同様の機能 SELECT ステートメントのクエリプランを表示します。
ユーザービューのメタデータ
システムビューのメタデータ
SELECT
* EXCEPT(is_typed)
FROM
mydataset.INFORMATION_SCHEMA.TABLES;

BigQuery Information Schema
データベース内のオブジェクトをクエリします

整合性の保証とトランザクション分離

Netezza と BigQuery はどちらもアトミックです。つまり、多数の行にわたってミューテーション単位で ACID に準拠しています。たとえば MERGE オペレーションは、複数の挿入値がある場合でも完全にアトミックです。

トランザクション

Netezza の構文では、ANSI SQL のトランザクション分離の 4 つのモードがすべてを受け入れられます。ただし、指定されたモードに関係なく、SERIALIZABLE モードのみが使用されるので、可能な限り高いレベルの整合性が実現します。また、このモードでは同時実行トランザクション間のダーティ読み取り、再現不能な読み取り、ファントム読み取りも回避されます。Netezza は、整合性を適用するために従来のロックを使用しません。代わりに、シリアル化依存関係チェックを使用します。これはオプティミスティック同時実行制御の一種であり、2 つのトランザクションが同じデータを変更しようとしたときに、最新のトランザクションを自動的にロールバックします。

また、BigQuery はトランザクションをサポートしています。BigQuery では、スナップショット分離を使用して、オプティミスティック同時実行制御(最初の commit が優先)が確実に実行されるようにします。この場合、クエリは、クエリの開始前に最後に commit されたデータを読み取ります。このアプローチにより、行ごと、ミューテーションごと、および同じ DML ステートメント内の行全体で同じレベルの整合性が保証され、デッドロックも回避されます。同じテーブルに対して複数の DML 更新を行う場合、BigQuery はペシミスティック同時実行制御に切り替わります。読み込みジョブは完全に独立して実行され、テーブルへの追加を実行できます。

ロールバック

Netezza は ROLLBACK ステートメントをサポートしています。このステートメントは、現在のトランザクションを中止し、トランザクションで行われたすべての変更をロールバックします。

BigQuery では、ROLLBACK TRANSACTION ステートメントを使用できます。

データベースに関する制限

上限 Netezza BigQuery
データベースあたりのテーブル数 32,000 制限なし
テーブルあたりの列数 1600 10000
最大行数 64 KB 100 MB
列とテーブルの名前の長さ 128 バイト 16,384 Unicode 文字
テーブルあたりの行数 無制限 無制限
SQL リクエストの最大長 1 MB(未解決標準 SQL クエリの最大長)

12 MB(解決済みレガシー SQL クエリと標準 SQL クエリの最大長)

ストリーミング:
10 MB(HTTP リクエスト サイズの上限)
10,000(リクエストあたりの最大行数)
リクエストとレスポンスの最大サイズ 10 MB(リクエスト)および 10 GB(レスポンス)、ただしページ分けまたは Cloud Storage API を使用する場合は実質的に無制限。
同時実行セッションの最大数 63 の同時読み取り / 書き込みトランザクション。サーバーへの 2,000 の同時接続。 100 個の同時実行クエリ(スロット予約で増やすことができます)、ユーザーあたり 300 個の同時実行 API リクエスト。

次のステップ