クエリサービスのSQL構文
Adobe Experience Platform Query Serviceでは、SELECT文やその他の制限付きコマンドに標準のANSI SQLを使用できます。 このドキュメントでは、Query ServiceでサポートされているSQL構文について説明します。
クエリを選択 select-queries
次の構文は、SELECTがサポートするQuery Service クエリを定義します。
[ WITH with_query [, ...] ]
SELECT [ ALL | DISTINCT [( expression [, ...] ) ] ]
[ * | expression [ [ AS ] output_name ] [, ...] ]
[ FROM from_item [, ...] ]
[ SNAPSHOT { SINCE start_snapshot_id | AS OF end_snapshot_id | BETWEEN start_snapshot_id AND end_snapshot_id } ]
[ WHERE condition ]
[ GROUP BY grouping_element [, ...] ]
[ HAVING condition [, ...] ]
[ WINDOW window_name AS ( window_definition ) [, ...] ]
[ { UNION | INTERSECT | EXCEPT | MINUS } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start ]
以下の「タブ」セクションには、FROM、GROUP、WITH キーワードで使用できるオプションが用意されています。
| code language-sql |
|---|
|
| code language-sql |
|---|
|
| code language-sql |
|---|
|
| code language-sql |
|---|
|
| code language-sql |
|---|
|
| code language-sql |
|---|
|
| code language-sql |
|---|
|
| code language-sql |
|---|
|
| code language-sql |
|---|
|
| code language-sql |
|---|
|
| code language-sql |
|---|
|
以下のサブセクションでは、上記の形式に従う場合にクエリで使用できる追加の句について詳しく説明します。
SNAPSHOT句
この句を使用すると、スナップショット IDに基づいてテーブル上のデータを増分読み取ることができます。 スナップショット IDは、データが書き込まれるたびにデータレイクテーブルに適用されるロングタイプ番号で表されるチェックポイントマーカーです。 SNAPSHOT句は、次の場所で使用されるテーブルのリレーションに自分自身を添付します。
[ SNAPSHOT { SINCE start_snapshot_id | AS OF end_snapshot_id | BETWEEN start_snapshot_id AND end_snapshot_id } ]
例
SELECT * FROM table_to_be_queried SNAPSHOT SINCE start_snapshot_id;
SELECT * FROM table_to_be_queried SNAPSHOT AS OF end_snapshot_id;
SELECT * FROM table_to_be_queried SNAPSHOT BETWEEN start_snapshot_id AND end_snapshot_id;
SELECT * FROM table_to_be_queried SNAPSHOT BETWEEN 'HEAD' AND start_snapshot_id;
SELECT * FROM table_to_be_queried SNAPSHOT BETWEEN end_snapshot_id AND 'TAIL';
SELECT * FROM (SELECT id FROM table_to_be_queried SNAPSHOT BETWEEN start_snapshot_id AND end_snapshot_id) C;
(SELECT * FROM table_to_be_queried SNAPSHOT SINCE start_snapshot_id) a
INNER JOIN
(SELECT * from table_to_be_joined SNAPSHOT AS OF your_chosen_snapshot_id) b
ON a.id = b.id;
HEAD句でTAILまたはSNAPSHOTを使用する場合は、引用符で囲む必要があります(「HEAD」、「TAIL」など)。 引用符なしで使用すると、構文エラーが発生します。以下の表では、SNAPSHOT句の各構文オプションの意味を説明しています。
SINCE start_snapshot_idAS OF end_snapshot_idBETWEEN start_snapshot_id AND end_snapshot_idstart_snapshot_idを除き、end_snapshot_idを含みます。BETWEEN HEAD AND start_snapshot_idstart_snapshot_idの行のみを返します。BETWEEN end_snapshot_id AND TAILend_snapshot_idの直後からデータセットの最後までデータを読み取ります(スナップショット IDを除く)。 つまり、end_snapshot_idがデータセットの最後のスナップショットである場合、その最後のスナップショットを超えるスナップショットはないため、クエリは0行を返します。SINCE start_snapshot_id INNER JOIN table_to_be_joined AS OF your_chosen_snapshot_id ON table_to_be_queried.id = table_to_be_joined.idtable_to_be_queriedから読み取り、table_to_be_joinedのデータとyour_chosen_snapshot_idのデータを結合します。 結合は、結合する2つのテーブルのID列の一致するIDに基づいています。SNAPSHOT句は、テーブルまたはテーブルのエイリアスで機能しますが、サブクエリまたはビューの上には機能しません。 SNAPSHOT句は、テーブル上のSELECT クエリを適用できる場所で使用できます。
また、HEADとTAILをスナップショット句の特殊なオフセット値として使用することもできます。 HEADを使用すると、最初のスナップショットの前のオフセットを参照し、TAILは最後のスナップショットの後のオフセットを参照します。
resolve_fallback_snapshot_on_failure)が設定されている場合、次の2つのシナリオが発生する可能性があります。- オプションのフォールバック動作フラグが設定されている場合、クエリサービスは利用可能な最も早いスナップショットを選択し、それを開始スナップショットとして設定し、利用可能な最も早いスナップショットと指定された終了スナップショットの間のデータを返します。 このデータは、使用可能な最も古いスナップショットの 包括的 です。
WHERE句
デフォルトでは、WHERE クエリのSELECT句によって生成された一致は、大文字と小文字が区別されます。 一致を大文字と小文字を区別しない場合は、ILIKEの代わりにキーワード LIKEを使用できます。
[ WHERE condition { LIKE | ILIKE | NOT LIKE | NOT ILIKE } pattern ]
LIKE句とILIKE句のロジックについては、次の表で説明します。
WHERE condition LIKE pattern~~WHERE condition NOT LIKE pattern!~~WHERE condition ILIKE pattern~~*WHERE condition NOT ILIKE pattern!~~*例
SELECT * FROM Customers
WHERE CustomerName ILIKE 'a%';
このクエリは、「A」または「a」で始まる名前を持つ顧客を返します。
結合
結合を使用するSELECT クエリの構文は次のとおりです。
SELECT statement
FROM statement
[JOIN | INNER JOIN | LEFT JOIN | LEFT OUTER JOIN | RIGHT JOIN | RIGHT OUTER JOIN | FULL JOIN | FULL OUTER JOIN]
ON join condition
UNION、INTERSECT、EXCEPT
UNION、INTERSECTおよびEXCEPT句は、2つ以上のテーブルから同じ行を結合または除外するために使用されます。
SELECT statement 1
[UNION | UNION ALL | UNION DISTINCT | INTERSECT | EXCEPT | MINUS]
SELECT statement 2
CREATE TABLE AS SELECT create-table-as-select
CREATE TABLE AS SELECT (CTAS) コマンドを使用して、SELECT クエリの結果を新しいテーブルに具現化します。 これは、変換されたデータセットの作成、集計の実行、またはモデルで使用する前に機能設計データをプレビューする場合に便利です。
変換された機能を使用してモデルをトレーニングする準備ができた場合は、句を使用してを使用する方法について、CREATE MODEL モデルのドキュメント TRANSFORMを参照してください。
オプションでTRANSFORM句を含めて、1つ以上の機能エンジニアリング関数をCTAS ステートメント内に直接適用できます。 モデルのトレーニングの前に、TRANSFORMを使用して変換ロジックの結果を調べます。
この構文は、永続テーブルと一時テーブルの両方に適用されます。
CREATE TABLE table_name
[WITH (schema='target_schema_title', rowvalidation='false', label='PROFILE')]
[TRANSFORM (transformFunctionExpression1, transformFunctionExpression2, ...)]
AS (select_query)
CREATE TEMP TABLE table_name
[WITH (schema='target_schema_title', rowvalidation='false', label='PROFILE')]
[TRANSFORM (transformFunctionExpression1, transformFunctionExpression2, ...)]
AS (select_query)
schemarowvalidationlabelPROFILEを使用して、プロファイルの取り込みに対してデータセットを有効としてラベル付けします。transformTRANSFORM節のドキュメント を参照してください。select_querySELECT ステートメント。 詳しくは、SELECT クエリの節を参照してください。SELECT ステートメントには、COUNT、SUM、MINなどの集計関数のエイリアスを含める必要があります。 SELECT クエリには、括弧の有無を問わず指定できます。 これは、TRANSFORM句が使用されているかどうかに関係なく適用されます。例
TRANSFORM句を使用して、いくつかのエンジニアリングされた機能をプレビューする基本的な例:
CREATE TABLE ctas_transform_table_vp14
TRANSFORM(
String_Indexer(additional_comments) si_add_comments,
one_hot_encoder(si_add_comments) as ohe_add_comments,
tokenizer(comments) as token_comments
)
AS SELECT * FROM movie_review_e2e_DND;
複数の変換ステップを持つより高度な例:
CREATE TABLE ctas_transform_table
TRANSFORM(
String_Indexer(additional_comments) si_add_comments,
one_hot_encoder(si_add_comments) as ohe_add_comments,
tokenizer(comments) as token_comments,
stop_words_remover(token_comments, array('and','very','much')) stp_token,
ngram(stp_token, 3) ngram_token,
tf_idf(ngram_token, 20) ngram_idf,
count_vectorizer(stp_token, 13) cnt_vec_comments,
tf_idf(token_comments, 10, 1) as cmts_idf
)
AS SELECT * FROM movie_review;
一時テーブルの例:
CREATE TEMP TABLE ctas_transform_table
TRANSFORM(
String_Indexer(additional_comments) si_add_comments,
one_hot_encoder(si_add_comments) as ohe_add_comments,
tokenizer(comments) as token_comments,
stop_words_remover(token_comments, array('and','very','much')) stp_token,
ngram(stp_token, 3) ngram_token,
tf_idf(ngram_token, 20) ngram_idf,
count_vectorizer(stp_token, 13) cnt_vec_comments,
tf_idf(token_comments, 10, 1) as cmts_idf
)
AS SELECT * FROM movie_review;
制限と行動 limitations-and-behavior
TRANSFORMまたはCREATE TABLEでCREATE TEMP TABLE句を使用する場合は、次の制限事項に注意してください。
- 変換関数がベクトル出力を生成すると、自動的に配列に変換されます。
- そのため、
TRANSFORMを使用して作成されたテーブルは、CREATE MODEL文で直接使用できません。 適切なフィーチャ ベクトルを生成するには、モデル作成時に変換ロジックを再定義する必要があります。 - 変換は、テーブルの作成時にのみ適用されます。
INSERT INTOでテーブルに挿入された新しいデータは自動的に変換されません。 変換を新しいデータに適用するには、CREATE TABLE AS SELECT句を使用してTRANSFORMを使用してテーブルを再作成する必要があります。 - この方法は、再利用可能な変換パイプラインを構築するためではなく、ある時点での変換のプレビューと検証を目的としています。
TRANSFORM句 transform
モデルのトレーニングまたはテーブルの作成前に、1つ以上の機能エンジニアリング関数をデータセットに適用するには、TRANSFORM句を使用します。 この句を使用すると、入力フィーチャの正確な形状をプレビュー、検証、または定義できます。
TRANSFORM句は、次のステートメントで使用できます。
CREATE MODELCREATE TABLECREATE TEMP TABLE
変換の定義、モデルオプションの設定、トレーニングデータの設定など、CREATE MODELの使用方法について詳しくは、 モデルのドキュメント を参照してください。
CREATE TABLEでの使用については、CREATE TABLE AS SELECT セクション を参照してください。
CREATE MODELの例
CREATE MODEL review_model
TRANSFORM(
String_Indexer(additional_comments) si_add_comments,
one_hot_encoder(si_add_comments) AS ohe_add_comments,
tokenizer(comments) AS token_comments,
stop_words_remover(token_comments, array('and','very','much')) AS stp_token,
ngram(stp_token, 3) AS ngram_token,
tf_idf(ngram_token, 20) AS ngram_idf,
count_vectorizer(stp_token, 13) AS cnt_vec_comments,
tf_idf(token_comments, 10, 1) AS cmts_idf,
vector_assembler(array(cmts_idf, viewsgot, ohe_add_comments, ngram_idf, cnt_vec_comments)) AS features
)
OPTIONS(MODEL_TYPE='logistic_reg', LABEL='reviews')
AS SELECT * FROM movie_review_e2e_DND;
制限事項 limitations
TRANSFORMでCREATE TABLEを使用する場合は、次の制限が適用されます。 変換されたデータの保存方法、ベクター出力の処理方法、および結果をモデルのトレーニングワークフローで直接再利用できない理由について詳しくは、CREATE TABLE AS SELECTの制限と動作の節を参照してください。
- ベクトル出力は自動的に配列に変換され、
CREATE MODELでは直接使用できません。 - 変換ロジックはメタデータとして保持されないので、バッチ間で再利用できません。
INSERT INTO
INSERT INTO コマンドは次のように定義されます。
INSERT INTOのみです。updateおよび delete 操作は使用できません。 データの変更を反映するには、目的の状態を表す新しいレコードを挿入します。INSERT INTO table_name select_query
table_nameselect_query例
INSERT INTO Customers SELECT SupplierName, City, Country FROM OnlineCustomers;
INSERT INTO Customers AS (SELECT * from OnlineCustomers SNAPSHOT AS OF 345)
SELECT ステートメントを括弧()で囲みます。 また、SELECT ステートメントの結果のスキーマは、INSERT INTO ステートメントで定義されたテーブルのスキーマに準拠している必要があります。 増分デルタをターゲット テーブルに読み込むには、SNAPSHOT句を指定できます。実際のXDM スキーマのほとんどのフィールドはルートレベルで見つからず、SQLではドット表記法の使用が許可されていません。 ネストされたフィールドを使用して現実的な結果を得るには、INSERT INTO パス内の各フィールドをマッピングする必要があります。
ネストされたパスをINSERT INTO個まで作成するには、次の構文を使用します。
INSERT INTO [dataset]
SELECT struct([source field1] as [target field in schema],
[source field2] as [target field in schema],
[source field3] as [target field in schema]) [tenant name]
FROM [dataset]
例
INSERT INTO Customers SELECT struct(SupplierName as Supplier, City as SupplierCity, Country as SupplierCountry) _Adobe FROM OnlineCustomers;
DROP TABLE
DROP TABLE コマンドは、既存のテーブルを削除し、そのテーブルが外部テーブルでない場合は、そのテーブルに関連付けられているディレクトリをファイルシステムから削除します。 テーブルが存在しない場合は、例外が発生します。
DROP TABLE [IF EXISTS] [db_name.]table_name
IF EXISTSCREATE DATABASE
CREATE DATABASE コマンドは、Azure Data Lake Storage (ADLS) データベースを作成します。
CREATE DATABASE [IF NOT EXISTS] db_name
データベースをドロップ
DROP DATABASE コマンドは、インスタンスからデータベースを削除します。
DROP DATABASE [IF EXISTS] db_name
IF EXISTSドロップスキーマ
DROP SCHEMA コマンドは、既存のスキーマを削除します。
DROP SCHEMA [IF EXISTS] db_name.schema_name [ RESTRICT | CASCADE]
IF EXISTSRESTRICTCASCADECREATE VIEW create-view
SQL ビューは、SQL ステートメントの結果セットに基づく仮想テーブルです。 CREATE VIEW ステートメントを使用してビューを作成し、名前を付けます。 その後、その名前を使用して、クエリの結果を参照できます。 これにより、複雑なクエリを容易に再利用できます。
次の構文は、データセットのCREATE VIEW クエリを定義します。 このデータセットは、ADLSまたは高速化されたストアデータセットです。
CREATE VIEW view_name AS select_query
view_nameselect_query例
CREATE VIEW V1 AS SELECT color, type FROM Inventory
CREATE OR REPLACE VIEW V1 AS SELECT model, version FROM Inventory
次の構文は、データベースとスキーマのコンテキストでビューを作成するCREATE VIEW クエリを定義します。
例
CREATE VIEW db_name.schema_name.view_name AS select_query
CREATE OR REPLACE VIEW db_name.schema_name.view_name AS select_query
db_nameschema_nameview_nameselect_query例
CREATE VIEW <dbV1 AS SELECT color, type FROM Inventory;
CREATE OR REPLACE VIEW V1 AS SELECT model, version FROM Inventory;
ビューを表示
次のクエリは、ビューのリストを示しています。
SHOW VIEWS;
Db Name | Schema Name | Name | Id | Dataset Dependencies | Views Dependencies | TYPE
|----------------------------------------------------------------------------------------------
qsaccel | profile_agg | view1 | view_id1 | dwh_dataset1 | | DWH
| | view2 | view_id2 | adls_dataset | adls_views | ADLS
(2 rows)
DROP VIEW
次の構文は、DROP VIEW クエリを定義します。
DROP VIEW [IF EXISTS] view_name
IF EXISTSview_name例
DROP VIEW v1
DROP VIEW IF EXISTS v1
匿名ブロック anonymous-block
匿名ブロックは、実行可能セクションと例外処理セクションの2つのセクションで構成されます。 匿名ブロックでは、実行可能セクションは必須です。 ただし、例外処理セクションはオプションです。
次の例は、1つ以上のステートメントを一緒に実行するブロックを作成する方法を示しています。
$$BEGIN
statementList
[EXCEPTION exceptionHandler]
$$END
exceptionHandler:
WHEN OTHER
THEN statementList
statementList:
: (statement (';')) +
以下は、匿名ブロックを使用した例です。
$$BEGIN
SET @v_snapshot_from = select parent_id from (select history_meta('email_tracking_experience_event_dataset') ) tab where is_current;
SET @v_snapshot_to = select snapshot_id from (select history_meta('email_tracking_experience_event_dataset') ) tab where is_current;
SET @v_log_id = select now();
CREATE TABLE tracking_email_id_incrementally
AS SELECT _id AS id FROM email_tracking_experience_event_dataset SNAPSHOT BETWEEN @v_snapshot_from AND @v_snapshot_to;
EXCEPTION
WHEN OTHER THEN
DROP TABLE IF EXISTS tracking_email_id_incrementally;
SELECT 'ERROR';
$$END;
匿名ブロック内の条件文 conditional-anonymous-block-statements
IF-THEN-ELSE制御構造は、条件がTRUEとして評価されたときに、ステートメントのリストの条件付き実行を有効にします。 この制御構造は、匿名ブロック内でのみ適用できます。 この構造体をスタンドアロン コマンドとして使用すると、構文エラー(「匿名ブロック外の無効なコマンド」)が発生します。
以下のコードスニペットは、匿名ブロック内のIF-THEN-ELSE条件文の正しい形式を示しています。
IF booleanExpression THEN
List of statements;
ELSEIF booleanExpression THEN
List of statements;
ELSEIF booleanExpression THEN
List of statements;
ELSE
List of statements;
END IF
例
次の例では、SELECT 200;を実行しています。
$$BEGIN
SET @V = SELECT 2;
SELECT @V;
IF @V = 1 THEN
SELECT 100;
ELSEIF @V = 2 THEN
SELECT 200;
ELSEIF @V = 3 THEN
SELECT 300;
ELSE
SELECT 'DEFAULT';
END IF;
END$$;
この構造は、raise_error();と組み合わせて使用すると、カスタムエラーメッセージを返すことができます。 以下に示すコードブロックは、「カスタムエラーメッセージ」で匿名ブロックを終了します。
例
$$BEGIN
SET @V = SELECT 5;
SELECT @V;
IF @V = 1 THEN
SELECT 100;
ELSEIF @V = 2 THEN
SELECT 200;
ELSEIF @V = 3 THEN
SELECT 300;
ELSE
SELECT raise_error('custom error message');
END IF;
END$$;
ネストされたIF ステートメント
ネストされたIF ステートメントは、匿名ブロック内でサポートされます。
例
$$BEGIN
SET @V = SELECT 1;
IF @V = 1 THEN
SELECT 100;
IF @V > 0 THEN
SELECT 1000;
END IF;
END IF;
END$$;
例外ブロック
例外ブロックは、匿名ブロック内でサポートされます。
例
$$BEGIN
SET @V = SELECT 2;
IF @V = 1 THEN
SELECT 100;
ELSEIF @V = 2 THEN
SELECT raise_error(concat('custom-error for v= ', '@V' ));
ELSEIF @V = 3 THEN
SELECT 300;
ELSE
SELECT 'DEFAULT';
END IF;
EXCEPTION WHEN OTHER THEN
SELECT 'THERE WAS AN ERROR';
END$$;
JSONに自動的に変換 auto-to-json
クエリサービスでは、オプションのセッションレベル設定をサポートしており、インタラクティブなSELECT クエリからトップレベルの複雑なフィールドをJSON文字列として返すことができます。 auto_to_json設定では、複雑なフィールドのデータをJSONとして返し、標準ライブラリを使用してJSON オブジェクトに解析できます。
複雑なフィールドを含むSELECT クエリを実行する前に、機能フラグ auto_to_jsonをtrueに設定します。
set auto_to_json=true;
auto_to_json フラグの設定前
次の表は、auto_to_json設定が適用される前のクエリ結果の例を示しています。 複雑なフィールドを持つテーブルをターゲットとする同じSELECT クエリ(以下に示す)が、両方のシナリオで使用されました。
SELECT * FROM TABLE_WITH_COMPLEX_FIELDS LIMIT 2;
結果は次の通りです。
_id | _experience | application | commerce | dataSource | device | endUserIDs | environment | identityMap | placeContext | receivedTimestamp | timestamp | userActivityRegion | web | _adcstageforpqs
|-----------------------------------+----------------------------------------------------------------------------+--------------+----------------------------------------------+------------+--------------------------------------------------------------------+--------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------+-------------------------------------------------------------------------+-----------------------+-----------------------+--------------------+--------------------------------------------------------------------------------------+-----------------
31892EE15DE00000-401D52664FF48A52 | ("("("(1,1)","(1,1)")","(-209479095,4085488201,-2105158467,2189808829)")") | (background) | (NULL,"(USD,NULL)",NULL,NULL,NULL,NULL,NULL) | (475341) | (32,768,1024,205202,https://ns.adobe.com/xdm/external/deviceatlas) | ("("(31892EE080007B35-E6CE00000000000,"(AAID)",t)")") | ("(en-US,f,f,t,1.6,"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7",490,1125)",xo.net,64.3.235.13) | [AAID -> "{(31892EE080007B35-E6CE00000000000,t)}"] | ("("(34.01,-84.0)",lawrenceville,US,524,30043,ga)",600) | 2022-09-02 19:47:14.0 | 2022-09-02 19:47:14.0 | (UT1) | ("(f,Search Results,"(1.0)")","(http://www.google.com/search?ie=UTF-8&q=,internal)") |
31892EE15DE00000-401B92664FF48AE8 | ("("("(1,1)","(1,1)")","(-209479095,4085488201,-2105158467,2189808829)")") | (background) | (NULL,"(USD,NULL)",NULL,NULL,NULL,NULL,NULL) | (475341) | (32,768,1024,205202,https://ns.adobe.com/xdm/external/deviceatlas) | ("("(31892EE100007BF3-215FE00000000001,"(AAID)",t)")") | ("(en-US,f,f,t,1.5,"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7",768,556)",ntt.net,219.165.108.145) | [AAID -> "{(31892EE100007BF3-215FE00000000001,t)}"] | ("("(34.989999999999995,138.42)",shizuoka,JP,392005,420-0812,22)",-240) | 2022-09-02 19:47:14.0 | 2022-09-02 19:47:14.0 | (UT1) | ("(f,Home - JJEsquire,"(1.0)")","(NULL,typed_bookmarked)") |
(2 rows)
auto_to_json フラグの設定後
次の表は、auto_to_json設定が結果のデータセットに与える結果の違いを示しています。 両方のシナリオで同じSELECT クエリが使用されました。
_id | receivedTimestamp | timestamp | _experience | application | commerce | dataSource | device | endUserIDs | environment | identityMap | placeContext | userActivityRegion | web | _adcstageforpqs
|-----------------------------------+-----------------------+-----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------+----------------------------------+------------------+-------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------
31892EE15DE00000-401D52664FF48A52 | 2022-09-02 19:47:14.0 | 2022-09-02 19:47:14.0 | {"analytics":{"customDimensions":{"eVars":{"eVar1":"1","eVar2":"1"},"props":{"prop1":"1","prop2":"1"}},"environment":{"browserID":-209479095,"browserIDStr":"4085488201","operatingSystemID":-2105158467,"operatingSystemIDStr":"2189808829"}}} | {"userPerspective":"background"} | {"order":{"currencyCode":"USD"}} | {"_id":"475341"} | {"colorDepth":32,"screenHeight":768,"screenWidth":1024,"typeID":"205202","typeIDService":"https://ns.adobe.com/xdm/external/deviceatlas"} | {"_experience":{"aaid":{"id":"31892EE080007B35-E6CE00000000000","namespace":{"code":"AAID"},"primary":true}}} | {"browserDetails":{"acceptLanguage":"en-US","cookiesEnabled":false,"javaEnabled":false,"javaScriptEnabled":true,"javaScriptVersion":"1.6","userAgent":"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7","viewportHeight":490,"viewportWidth":1125},"domain":"xo.net","ipV4":"64.3.235.13"} | {"AAID":[{"id":"31892EE080007B35-E6CE00000000000","primary":true}]} | {"geo":{"_schema":{"latitude":34.01,"longitude":-84.0},"city":"lawrenceville","countryCode":"US","dmaID":524,"postalCode":"30043","stateProvince":"ga"},"localTimezoneOffset":600} | {"dataCenterLocation":"UT1"} | {"webPageDetails":{"isHomePage":false,"name":"Search Results","pageViews":{"value":1.0}},"webReferrer":{"URL":"http://www.google.com/search?ie=UTF-8&q=","type":"internal"}} |
31892EE15DE00000-401B92664FF48AE8 | 2022-09-02 19:47:14.0 | 2022-09-02 19:47:14.0 | {"analytics":{"customDimensions":{"eVars":{"eVar1":"1","eVar2":"1"},"props":{"prop1":"1","prop2":"1"}},"environment":{"browserID":-209479095,"browserIDStr":"4085488201","operatingSystemID":-2105158467,"operatingSystemIDStr":"2189808829"}}} | {"userPerspective":"background"} | {"order":{"currencyCode":"USD"}} | {"_id":"475341"} | {"colorDepth":32,"screenHeight":768,"screenWidth":1024,"typeID":"205202","typeIDService":"https://ns.adobe.com/xdm/external/deviceatlas"} | {"_experience":{"aaid":{"id":"31892EE100007BF3-215FE00000000001","namespace":{"code":"AAID"},"primary":true}}} | {"browserDetails":{"acceptLanguage":"en-US","cookiesEnabled":false,"javaEnabled":false,"javaScriptEnabled":true,"javaScriptVersion":"1.5","userAgent":"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7","viewportHeight":768,"viewportWidth":556},"domain":"ntt.net","ipV4":"219.165.108.145"} | {"AAID":[{"id":"31892EE100007BF3-215FE00000000001","primary":true}]} | {"geo":{"_schema":{"latitude":34.989999999999995,"longitude":138.42},"city":"shizuoka","countryCode":"JP","dmaID":392005,"postalCode":"420-0812","stateProvince":"22"},"localTimezoneOffset":-240} | {"dataCenterLocation":"UT1"} | {"webPageDetails":{"isHomePage":false,"name":"Home - JJEsquire","pageViews":{"value":1.0}},"webReferrer":{"type":"typed_bookmarked"}} |
(2 rows)
失敗した場合のフォールバックスナップショットの解決 resolve-fallback-snapshot-on-failure
resolve_fallback_snapshot_on_failure オプションは、期限切れのスナップショット IDの問題を解決するために使用されます。
以前のスナップショット IDでスナップショットを上書きするには、resolve_fallback_snapshot_on_failure オプションをtrueに設定します。
SET resolve_fallback_snapshot_on_failure=true;
次のコード行では、メタデータから入手できる最も古い snapshot_id で @from_snapshot_id をオーバーライドしています。
$$ BEGIN
SET resolve_fallback_snapshot_on_failure=true;
SET @from_snapshot_id = SELECT coalesce(last_snapshot_id, 'HEAD') FROM checkpoint_log a JOIN
(SELECT MAX(process_timestamp)process_timestamp FROM checkpoint_log
WHERE process_name = 'DIM_TABLE_ABC' AND process_status = 'SUCCESSFUL' )b
on a.process_timestamp=b.process_timestamp;
SET @to_snapshot_id = SELECT snapshot_id FROM (SELECT history_meta('DIM_TABLE_ABC')) WHERE is_current = true;
SET @last_updated_timestamp= SELECT CURRENT_TIMESTAMP;
INSERT INTO DIM_TABLE_ABC_Incremental
SELECT * FROM DIM_TABLE_ABC SNAPSHOT BETWEEN @from_snapshot_id AND @to_snapshot_id WHERE NOT EXISTS (SELECT _id FROM DIM_TABLE_ABC_Incremental a WHERE _id=a._id);
Insert Into
checkpoint_log
SELECT
'DIM_TABLE_ABC' process_name,
'SUCCESSFUL' process_status,
cast( @to_snapshot_id AS string) last_snapshot_id,
cast( @last_updated_timestamp AS TIMESTAMP) process_timestamp;
EXCEPTION
WHEN OTHER THEN
SELECT 'ERROR';
END
$$;
データアセット組織
データが増大した場合は、Adobe Experience Platformデータレイク内のデータアセットを論理的に整理することが重要です。 クエリサービスは、サンドボックス内のデータアセットを論理的にグループ化できるSQL構造を拡張します。 この組織化方法により、スキーマ間でデータアセットを共有できます。スキーマを物理的に移動する必要はありません。
標準的なSQL構文を使用した次のSQL構文は、データを論理的に整理するためにサポートされています。
CREATE DATABASE dg1;
CREATE SCHEMA dg1.schema1;
CREATE table t1 ...;
CREATE view v1 ...;
ALTER TABLE t1 ADD PRIMARY KEY (c1) NOT ENFORCED;
ALTER TABLE t2 ADD FOREIGN KEY (c1) REFERENCES t1(c1) NOT ENFORCED;
クエリサービスのベストプラクティスについて詳しくは、 データアセットの論理的な整理 ガイドを参照してください。
テーブルが存在します
table_exists SQL コマンドは、テーブルが現在システムに存在するかどうかを確認するために使用されます。 このコマンドは、テーブル trueが存在する場合は、テーブルがfalseが存在しない場合はというブール値を返します。
ステートメントを実行する前にテーブルが存在するかどうかを検証することで、table_exists機能は、CREATEとINSERT INTOの両方のユースケースをカバーする匿名ブロックの書き込みプロセスを簡素化します。
次の構文は、table_exists コマンドを定義します。
$$
BEGIN
#Set mytableexist to true if the table already exists.
SET @mytableexist = SELECT table_exists('target_table_name');
#Create the table if it does not already exist (this is a one time operation).
CREATE TABLE IF NOT EXISTS target_table_name AS
SELECT *
FROM profile_dim_date limit 10;
#Insert data only if the table already exists. Check if @mytableexist = 'true'
INSERT INTO target_table_name (
select *
from profile_dim_date
WHERE @mytableexist = 'true' limit 20
) ;
EXCEPTION
WHEN other THEN SELECT 'ERROR';
END $$;
インライン inline
inline関数は、構造体の配列の要素を分離し、値をテーブルに生成します。 SELECT リストまたはLATERAL VIEWにのみ配置できます。
inline関数は、他のジェネレーター関数がある選択リストに配置できません。
デフォルトでは、生成される列には「col1」、「col2」などの名前が付けられます。 式がNULLの場合、行は生成されません。
RENAME コマンドを使用して名前を変更できます。例
> SELECT inline(array(struct(1, 'a'), struct(2, 'b'))), 'Spark SQL';
この例では、次の値が返されます。
1 a Spark SQL
2 b Spark SQL
この2番目の例では、inline関数の概念とアプリケーションをさらに示しています。 この例のデータモデルは、次の画像に示されています。
例
select inline(productListItems) from source_dataset limit 10;
source_datasetから取得された値は、ターゲット テーブルの設定に使用されます。
SET
SET コマンドはプロパティを設定し、既存のプロパティの値を返すか、既存のすべてのプロパティを一覧表示します。 既存プロパティのキーに値が指定された場合、古い値が上書きされます。
SET property_key = property_value
property_keyproperty_value任意の設定の値を返すには、SET [property key]なしでproperty_valueを使用します。
PostgreSQL コマンド
以下のサブセクションでは、クエリサービスでサポートされているPostgreSQL コマンドについて説明します。
テーブルを分析 analyze-table
ANALYZE TABLE コマンドは、指定されたテーブルまたはテーブルの分布分析と統計計算を実行します。 ANALYZE TABLEの使用は、データセットが高速化ストア に保存されているか、 データレイク に保存されているかによって異なります。 その使用について詳しくは、それぞれの節を参照してください。
高速化されたストアのCOMPUTE統計 compute-statistics-accelerated-store
ANALYZE TABLE コマンドは、高速化されたストア上のテーブルの統計を計算します。 統計は、高速化されたストア上の特定のテーブルに対して実行されたCTASまたはITAS クエリに基づいて計算されます。
例
ANALYZE TABLE <original_table_name>
次に、ANALYZE TABLE コマンド :-を使用した後に使用できる統計計算のリストを示します
fielddata-typecountdistinct-countmissingmaxminmeanstdevデータレイクのCOMPUTE統計 compute-statistics-data-lake
Azure Data Lake Storage SQL コマンドを使用して、COMPUTE STATISTICS (ADLS) データセットの列レベルの統計を計算できるようになりました。 データセット全体、データセットのサブセット、すべての列、または列のサブセットのいずれかに関する列統計を計算します。
COMPUTE STATISTICSはANALYZE TABLE コマンドを拡張します。 ただし、COMPUTE STATISTICS、FILTERCONTEXTおよびFOR COLUMNS コマンドは、高速化されたストアテーブルではサポートされていません。 ANALYZE TABLE コマンドのこれらの拡張機能は、現在、ADLS テーブルでのみサポートされています。
例
ANALYZE TABLE tableName FILTERCONTEXT (timestamp >= to_timestamp('2023-04-01 00:00:00') and timestamp <= to_timestamp('2023-04-05 00:00:00')) COMPUTE STATISTICS FOR COLUMNS (commerce, id, timestamp);
FILTER CONTEXT コマンドは、指定されたフィルター条件に基づいて、データセットのサブセットに関する統計を計算します。 FOR COLUMNS コマンドは、分析のために特定の列をターゲットにします。
Statistics IDと統計は各セッションにのみ有効で、異なるPSQL セッション間でアクセスすることはできません。制限:
- 統計の生成は、配列またはマップデータタイプではサポートされていません
- 計算された統計は、セッション間で not 保持されます。
skip_stats_for_complex_datatypes
SET skip_stats_for_complex_datatypes = falseコンソール出力は以下のように表示されます。
| Statistics ID |
| ---------------------- |
| adc_geometric_stats_1 |
(1 row)
次に、Statistics IDを参照して、計算された統計を直接クエリできます。 次のステートメントの例に示すように、Statistics IDまたはエイリアス名を使用して、出力を完全に表示します。 この機能について詳しくは、 エイリアス名のドキュメント を参照してください。
-- This statement gets the statistics generated for `alias adc_geometric_stats_1`.
SELECT * FROM adc_geometric_stats_1;
SHOW STATISTICS コマンドを使用して、セッションで生成されたすべての一時的な統計のメタデータを表示します。 このコマンドを使用すると、統計分析の範囲を絞り込むことができます。
SHOW STATISTICS;
SHOW STATISTICSの出力例を以下に示します。
statsId | tableName | columnSet | filterContext | timestamp
|----------------------+---------------+-----------+-----------------------------+--------------------
adc_geometric_stats_1 | adc_geometric | (age) | | 25/06/2023 09:22:26
demo_table_stats_1 | demo_table | (*) | ((age > 25)) | 25/06/2023 12:50:26
age_stats | castedtitanic | (age) | ((age > 25) AND (age < 40)) | 25/06/2023 09:22:26
詳しくは、 データセット統計ドキュメント を参照してください。
表サンプル tablesample
Adobe Experience Platform Query Serviceでは、近似クエリ処理機能の一部として、サンプルデータセットを提供しています。
データセットのサンプルは、データセットに対する集計操作に対する正確な回答が必要ない場合に最適です。 近似クエリを発行して近似クエリを返し、大規模なデータセットに対してより効率的な探索的クエリを実行するには、TABLESAMPLE機能を使用します。
サンプルデータセットは、既存のAzure Data Lake Storage (ADLS)データセットの均一なランダムサンプルで作成され、元のデータセットのレコードの割合のみが使用されます。 データセットサンプル機能は、ANALYZE TABLE コマンドをTABLESAMPLEおよびSAMPLERATE SQL コマンドで拡張します。
次の例では、1行目は、表の5%のサンプルを計算する方法を示しています。 2行目は、テーブル内のデータのフィルタリングされたビューから5% サンプルを計算する方法を示しています。
例
ANALYZE TABLE tableName TABLESAMPLE SAMPLERATE 5;
ANALYZE TABLE tableName FILTERCONTEXT (timestamp >= to_timestamp('2023-01-01')) TABLESAMPLE SAMPLERATE 5:
詳しくは、 データセットサンプルのドキュメント を参照してください。
BEGIN
BEGIN コマンド、またはBEGIN WORKまたはBEGIN TRANSACTION コマンドにより、トランザクション ブロックが開始されます。 begin コマンドの後に入力されたステートメントは、明示的なCOMMIT コマンドまたはROLLBACK コマンドが指定されるまで、1回のトランザクションで実行されます。 このコマンドはSTART TRANSACTIONと同じです。
BEGIN
BEGIN WORK
BEGIN TRANSACTION
CLOSE
CLOSE コマンドは、開いているカーソルに関連付けられているリソースを解放します。 カーソルを閉じた後の操作は許可されません。不要になったカーソルは閉じる必要があります。
CLOSE name
CLOSE ALL
CLOSE nameを使用する場合、nameは閉じる必要がある開いているカーソルの名前を表します。 CLOSE ALLを使用すると、開いているすべてのカーソルが閉じます。
DEALLOCATE
事前に準備されたSQL ステートメントの割り当てを解除するには、DEALLOCATE コマンドを使用します。 準備済みステートメントの割り当てを明示的に解除しなかった場合は、セッションが終了したときに割り当てが解除されます。 準備済みステートメントの詳細については、PREPARE コマンド セクションを参照してください。
DEALLOCATE name
DEALLOCATE ALL
DEALLOCATE nameを使用する場合、nameは割り当て解除する必要がある準備済みステートメントの名前を表します。 DEALLOCATE ALLを使用すると、準備されたすべてのステートメントの割り当てが解除されます。
DECLARE
DECLARE コマンドを使用すると、ユーザーはカーソルを作成できます。カーソルを使用すると、より大きなクエリから少数の行を取得できます。 カーソルが作成された後、FETCH を使用して行がカーソルから取得されます。
DECLARE name CURSOR FOR query
namequerySELECTまたはVALUES コマンド。EXECUTE
EXECUTE コマンドは、事前に準備されたステートメントを実行するために使用されます。 準備済みステートメントはセッション中にのみ存在するため、準備済みステートメントは、現在のセッションで以前に実行されたPREPARE ステートメントによって作成されている必要があります。 準備済みステートメントの使用について詳しくは、PREPARE コマンド セクションを参照してください。
ステートメントを作成したPREPARE ステートメントが一部のパラメーターを指定した場合、互換性のある一連のパラメーターをEXECUTE ステートメントに渡す必要があります。 これらのパラメーターが渡されない場合、エラーが発生します。
EXECUTE name [ ( parameter ) ]
nameparameterEXPLAIN
EXPLAIN コマンドは、指定されたステートメントの実行計画を表示します。 実行プランは、ステートメントで参照されるテーブルのスキャン方法を示します。 複数のテーブルが参照されている場合、各入力テーブルから必要な行をまとめるために使用される結合アルゴリズムが表示されます。
EXPLAIN statement
応答の形式を定義するには、FORMAT コマンドでEXPLAIN キーワードを使用します。
EXPLAIN FORMAT { TEXT | JSON } statement
FORMATFORMAT コマンドを使用します。 使用可能なオプションはTEXTまたはJSONです。 テキスト以外の出力には、テキスト出力形式と同じ情報が含まれますが、プログラムの解析が容易です。このパラメーターのデフォルトは TEXT です。statementSELECT、INSERT、UPDATE、DELETE、VALUES、EXECUTE、DECLARE、CREATE TABLE ASまたはCREATE MATERIALIZED VIEW ASのステートメント。SELECT ステートメントが返す可能性のある出力は、EXPLAIN キーワードで実行すると破棄されます。 その他の副作用は、通常どおり発生します。例
次の例は、単一のinteger列と10000行を持つテーブル上の単純なクエリの計画を示しています。
EXPLAIN SELECT * FROM foo;
QUERY PLAN
|---------------------------------------------------------
Seq Scan on foo (dataSetId = "6307eb92f90c501e072f8457", dataSetName = "foo") [0,1000000242,6973776840203d3d,6e616c58206c6153,6c6c6f430a3d4d20,74696d674c746365]
(1 row)
FETCH
FETCH コマンドは、以前に作成したカーソルを使用して行を取得します。
FETCH num_of_rows [ IN | FROM ] cursor_name
num_of_rowscursor_namePREPARE prepare
PREPARE コマンドを使用すると、準備済みステートメントを作成できます。 準備済みステートメントは、類似のSQL ステートメントをテンプレート化するために使用できるサーバーサイドオブジェクトです。
準備済みステートメントは、実行時にステートメントに代入される値であるパラメーターを取ることができます。 パラメーターは、準備済みステートメントを使用する場合、$1、$2などを使用して、位置で参照されます。
必要に応じて、パラメータデータタイプのリストを指定できます。 パラメーターのデータタイプがリストされていない場合、そのタイプはコンテキストから推測できます。
PREPARE name [ ( data_type [, ...] ) ] AS SELECT
namedata_typeロールバック
ROLLBACK コマンドは、現在のトランザクションを取り消し、トランザクションによって行われたすべての更新を破棄します。
ROLLBACK
ROLLBACK WORK
SELECT INTO
SELECT INTO コマンドは新しいテーブルを作成し、クエリで計算されたデータを入力します。 通常のSELECT コマンドでは、データはクライアントに返されません。 新しいテーブルの列には、SELECT コマンドの出力列に関連付けられた名前とデータ型が含まれています。
[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
* | expression [ [ AS ] output_name ] [, ...]
INTO [ TEMPORARY | TEMP | UNLOGGED ] [ TABLE ] new_table
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ WINDOW window_name AS ( window_definition ) [, ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
[ FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ] [...] ]
標準のSELECT クエリパラメーターの詳細については、SELECT クエリセクション を参照してください。 このセクションには、SELECT INTO コマンドに固有のパラメーターのみが一覧表示されます。
TEMPORARY または TEMPUNLOGGEDnew_table例
次のクエリは、テーブル films_recentの最近のエントリのみで構成される新しいテーブル filmsを作成します。
SELECT * INTO films_recent FROM films WHERE date_prod >= '2002-01-01';
SHOW
SHOW コマンドは、実行時パラメーターの現在の設定を表示します。 これらの変数は、SET ステートメント、postgresql.conf設定ファイルの編集、PGOPTIONS環境変数(libpqまたはlibpq ベースのアプリケーションを使用する場合)、またはPostgres サーバーの起動時にコマンドラインフラグを使用して設定できます。
SHOW name
SHOW ALL
nameSERVER_VERSION:このパラメーターは、サーバーのバージョン番号を示します。SERVER_ENCODING:このパラメーターは、サーバーサイドの文字セット エンコーディングを示します。LC_COLLATE:このパラメーターは、照合用のデータベースのロケール設定(テキスト順序)を表示します。LC_CTYPE:このパラメーターは、文字分類のデータベースのロケール設定を表示します。IS_SUPERUSER:このパラメーターは、現在の役割にスーパーユーザー権限があるかどうかを示します。ALL例
次のクエリは、パラメーターDateStyleの現在の設定を示しています。
SHOW DateStyle;
DateStyle
|-----------
ISO, MDY
(1 row)
コピー
COPY コマンドは、任意のSELECT クエリの出力を指定した場所に複製します。 このコマンドを正常に実行するには、ユーザーがこの場所にアクセスできる必要があります。
COPY query
TO '%scratch_space%/folder_location'
[ WITH FORMAT 'format_name']
queryformat_nameformat_nameは、parquet、csv、またはjsonのいずれかです。 デフォルトでは、値はparquetです。adl://<ADLS_URI>/users/<USER_ID>/acp_foundation_queryService/folder_location/<QUERY_ID>ですALTER TABLE alter-table
ALTER TABLE コマンドを使用すると、プライマリ キーまたは外部キーの制約を追加または削除したり、テーブルに列を追加したりできます。
制約の追加または削除
次のSQL クエリは、テーブルに制約を追加または削除する例を示しています。 プライマリキーと外部キーの制約は、コンマ区切りの値を持つ複数の列に追加できます。 次の例に示すように、複数の列名の値を渡すことで、複合キーを作成できます。
プライマリキーまたは複合キーを定義
ALTER TABLE table_name ADD CONSTRAINT PRIMARY KEY ( column_name ) NAMESPACE namespace
ALTER TABLE table_name ADD CONSTRAINT PRIMARY KEY ( column_name1, column_name2 ) NAMESPACE namespace
1つ以上のキーに基づいてテーブル間の関係を定義する
ALTER TABLE table_name ADD CONSTRAINT FOREIGN KEY ( column_name ) REFERENCES referenced_table_name ( primary_column_name )
ALTER TABLE table_name ADD CONSTRAINT FOREIGN KEY ( column_name1, column_name2 ) REFERENCES referenced_table_name ( primary_column_name1, primary_column_name2 )
ID列を定義
ALTER TABLE table_name ADD CONSTRAINT PRIMARY IDENTITY ( column_name ) NAMESPACE namespace
ALTER TABLE table_name ADD CONSTRAINT IDENTITY ( column_name ) NAMESPACE namespace
制約/関係/IDを削除
ALTER TABLE table_name DROP CONSTRAINT PRIMARY KEY ( column_name )
ALTER TABLE table_name DROP CONSTRAINT PRIMARY KEY ( column_name1, column_name2 )
ALTER TABLE table_name DROP CONSTRAINT FOREIGN KEY ( column_name )
ALTER TABLE table_name DROP CONSTRAINT FOREIGN KEY ( column_name1, column_name2 )
ALTER TABLE table_name DROP CONSTRAINT PRIMARY IDENTITY ( column_name )
ALTER TABLE table_name DROP CONSTRAINT IDENTITY ( column_name )
table_namecolumn_namereferenced_table_nameprimary_column_nameプライマリ IDとセカンダリ IDの追加または削除
プライマリ ID テーブル列とセカンダリ ID テーブル列の両方に対する制約を追加または削除するには、ALTER TABLE コマンドを使用します。
次の例では、制約を追加して、プライマリ IDとセカンダリ IDを追加します。
ALTER TABLE t1 ADD CONSTRAINT PRIMARY IDENTITY (id) NAMESPACE 'IDFA';
ALTER TABLE t1 ADD CONSTRAINT IDENTITY(id) NAMESPACE 'IDFA';
IDは、次の例に示すように、制約をドロップすることで削除することもできます。
ALTER TABLE t1 DROP CONSTRAINT PRIMARY IDENTITY (c1) ;
ALTER TABLE t1 DROP CONSTRAINT IDENTITY (c1) ;
詳しくは、 アドホックデータセットでのIDの設定に関するドキュメントを参照してください。
列を追加
次のSQL クエリは、テーブルに列を追加する例を示しています。
ALTER TABLE table_name ADD COLUMN column_name data_type
ALTER TABLE table_name ADD COLUMN column_name_1 data_type1, column_name_2 data_type2
サポートされているデータタイプ
次の表は、Azure SQLのPostgres SQL、XDMおよびAccelerated Database Recovery (ADR)を含むテーブルに列を追加するために使用できるデータタイプを示しています。
bigintint8bigintintegerint4integersmallintint2smallinttinyintint1tinyintvarchar(len)stringvarchar(len)varcharは、列データ エントリのサイズがかなり異なる場合に最適です。doublefloat8double precisionFLOAT8とFLOATはDOUBLE PRECISIONの有効な類義語です。 double precisionは浮動小数点データ型です。 浮動小数点値は8 バイト単位で格納されます。double precisionfloat8double precisionFLOAT8はdouble precisionの有効な同義語です。double precisionは浮動小数点データ型です。 浮動小数点値は8 バイト単位で格納されます。datedatedatedate データ型は、タイムスタンプ情報のない4 バイトの保存されたカレンダー日付値です。 有効な日付の範囲は、01-01-0001 ~ 12-31-9999です。datetimedatetimedatetimedatetimeには、年、月、日、時間、秒、分数の修飾子が含まれます。 datetime宣言には、そのシーケンスに結合されているこれらの時間単位のサブセットを含めることも、1つの時間単位のみを含めることもできます。char(len)stringchar(len)char(len) キーワードは、アイテムが固定長文字であることを示すために使用されます。スキーマを追加
次のSQL クエリは、データベース / スキーマにテーブルを追加する例を示しています。
ALTER TABLE table_name ADD SCHEMA database_name.schema_name
スキーマの削除
次のSQL クエリは、データベース / スキーマからテーブルを削除する例を示しています。
ALTER TABLE table_name REMOVE SCHEMA database_name.schema_name
パラメーター
table_namecolumn_namedata_typeプライマリキーを表示
SHOW PRIMARY KEYS コマンドには、特定のデータベースに対するすべてのプライマリキーの制約が一覧表示されます。
SHOW PRIMARY KEYS
tableName | columnName | datatype | namespace
|------------------+----------------------+----------+-----------
table_name_1 | column_name1 | text | "ECID"
table_name_2 | column_name2 | text | "AAID"
外部キーを表示
SHOW FOREIGN KEYS コマンドには、特定のデータベースに対するすべての外部キー制約が一覧表示されます。
SHOW FOREIGN KEYS
tableName | columnName | datatype | referencedTableName | referencedColumnName | namespace
|------------------+---------------------+----------+---------------------+----------------------+-----------
table_name_1 | column_name1 | text | table_name_3 | column_name3 | "ECID"
table_name_2 | column_name2 | text | table_name_4 | column_name4 | "AAID"
データグループを表示
SHOW DATAGROUPS コマンドは、関連するすべてのデータベースのテーブルを返します。 データベースごとに、テーブルにはスキーマ、グループタイプ、子タイプ、子名、子IDが含まれます。
SHOW DATAGROUPS
Database | Schema | GroupType | ChildType | ChildName | ChildId
-------------+-------------------+-----------+----------------------+----------------------------------------------------+--------------------------------------
adls_db | adls_scheema | ADLS | Data Lake Table | adls_table1 | 6149ff6e45cfa318a76ba6d3
adls_db | adls_scheema | ADLS | Accelerated Store | _table_demo1 | 22df56cf-0790-4034-bd54-d26d55ca6b21
adls_db | adls_scheema | ADLS | View | adls_view1 | c2e7ddac-d41c-40c5-a7dd-acd41c80c5e9
adls_db | adls_scheema | ADLS | View | adls_view4 | b280c564-df7e-405f-80c5-64df7ea05fc3
テーブルのデータグループを表示
SHOW DATAGROUPS FOR 'table_name' コマンドは、パラメーターを子として含むすべての関連データベースのテーブルを返します。 データベースごとに、テーブルにはスキーマ、グループタイプ、子タイプ、子名、子IDが含まれます。
SHOW DATAGROUPS FOR 'table_name'
パラメーター
table_name:関連するデータベースを検索するテーブルの名前。
Database | Schema | GroupType | ChildType | ChildName | ChildId
-------------+-------------------+-----------+----------------------+----------------------------------------------------+--------------------------------------
dwh_db_demo | schema2 | QSACCEL | Accelerated Store | _table_demo2 | d270f704-0a65-4f0f-b3e6-cb535eb0c8ce
dwh_db_demo | schema1 | QSACCEL | Accelerated Store | _table_demo2 | d270f704-0a65-4f0f-b3e6-cb535eb0c8ce
qsaccel | profile_aggs | QSACCEL | Accelerated Store | _table_demo2 | d270f704-0a65-4f0f-b3e6-cb535eb0c8ce