クエリサービスの SQL 構文
Adobe Experience Platform クエリサービスの SELECT
ステートメントやその他の制限付きコマンドには、標準の ANSI SQL を使用できます。 このドキュメントでは、Query Service でサポートされる SQL 構文について説明します。
クエリを選択 select-queries
次の構文は、Query Service でサポートされる SELECT
クエリを定義します。
[ 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 は、データが書き込まれるたびにデータレイクテーブルに適用される、Long タイプの番号で表されるチェックポイントマーカーです。 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 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;
次の表に、SNAPSHOT 句内の各構文オプションの意味を示します。
SINCE start_snapshot_id
AS OF end_snapshot_id
BETWEEN start_snapshot_id AND end_snapshot_id
start_snapshot_id
を除き、end_snapshot_id
を含みます。BETWEEN HEAD AND start_snapshot_id
start_snapshot_id
の行のみを返すことに注意してください。BETWEEN end_snapshot_id AND TAIL
end-snapshot_id
の直後からデータセットの最後(スナップショット ID を除く)までデータを読み取ります。 つまり、データセット内の最後のスナップショットが end_snapshot_id
の場合、その最後のスナップショットを超えるスナップショットはないので、クエリはゼロ行を返します。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.id
table_to_be_queried
から読み取り、your_chosen_snapshot_id
の時点の table_to_be_joined
からのデータと結合します。 結合は、結合する 2 つのテーブルの ID 列の一致する ID に基づきます。SNAPSHOT
句は、テーブルまたはテーブルの別名と一緒に使用できますが、サブクエリまたはビューの上には使用できません。 SNAPSHOT
句は、テーブルの SELECT
クエリを適用できる場所で機能します。
また、スナップショット句の特別なオフセット値として HEAD
と TAIL
を使用することもできます。 HEAD
を使用する場合は、最初のスナップショットの前のオフセットを参照し、TAIL
を使用する場合は、最後のスナップショットの後のオフセットを参照します。
resolve_fallback_snapshot_on_failure
)が設定されていると、次の 2 つのシナリオが発生する可能性があります。- オプションのフォールバック動作フラグが設定されている場合、クエリサービスは使用可能な最も古いスナップショットを選択し、それを開始スナップショットとして設定し、使用可能な最も古いスナップショットと指定された終了スナップショットの間のデータを返します。 このデータには、使用可能な最も古いスナップショットの 含む が含まれます。
WHERE 句
デフォルトでは、SELECT
クエリの WHERE
句で生成される一致は、大文字と小文字が区別されます。 大文字と小文字を区別せずに一致させる場合は、LIKE
の代わりにキーワード ILIKE
を使用します。
[ 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 つ以上のテーブルの like 行を組み合わせたり、除外したりするために使用します。
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)クエリを定義します。
CREATE TABLE table_name [ WITH (schema='target_schema_title', rowvalidation='false', label='PROFILE') ] AS (select_query)
schema
rowvalidation
true
です。label
profile
と共に使用して、プロファイルに対して有効であるとしてデータセットにラベルを付けます。 つまり、データセットは、作成時に自動的にプロファイル用にマークされます。 label
の使用について詳しくは、派生属性拡張ドキュメントを参照してください。select_query
例
CREATE TABLE Chairs AS (SELECT color, count(*) AS no_of_chairs FROM Inventory i WHERE i.type=="chair" GROUP BY i.color)
CREATE TABLE Chairs WITH (schema='target schema title', label='PROFILE') AS (SELECT color, count(*) AS no_of_chairs FROM Inventory i WHERE i.type=="chair" GROUP BY i.color)
CREATE TABLE Chairs AS (SELECT color FROM Inventory SNAPSHOT SINCE 123)
SELECT
ステートメントには、COUNT
、SUM
、MIN
などの集計関数のエイリアスが必要です。 また、SELECT
ステートメントに括弧()を付ける場合と付けない場合があります。 SNAPSHOT
句を指定すると、増分差分をターゲットテーブルに読み込むことができます。INSERT INTO
INSERT INTO
コマンドは、次のように定義されます。
INSERT INTO table_name select_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 EXISTS
データベースを作成
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 EXISTS
RESTRICT
CASCADE
CREATE VIEW create-view
SQL ビューは、SQL 文の結果セットに基づく仮想テーブルです。 CREATE VIEW
ステートメントでビューを作成し、名前を付けます。 その後、その名前を使用して、クエリの結果を返すことができます。 これにより、複雑なクエリの再利用が容易になります。
次の構文は、データセットの CREATE VIEW
クエリを定義します。 このデータセットは、ADLS または高速ストアデータセットにすることができます。
CREATE VIEW view_name AS select_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_name
schema_name
view_name
select_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 EXISTS
view_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_key
property_value
任意の設定の値を返すには、property_value
を付けずに SET [property key]
を使用します。
PostgreSQL コマンド
以下のサブセクションでは、クエリサービスでサポートされている PostgreSQL コマンドについて説明します。
分析テーブル analyze-table
ANALYZE TABLE
コマンドは、指定されたテーブルに対して分布分析および統計計算を実行します。 ANALYZE TABLE
の使用方法は、データセットが 高速化ストアと データレイクのどちらに保存されているかによって異なります。 使用方法について詳しくは、それぞれの節を参照してください。
高速化ストアの統計を計算 compute-statistics-accelerated-store
ANALYZE TABLE
コマンドは、高速化ストア上のテーブルの統計を計算します。 統計は、高速化ストア上の特定のテーブルに対して実行された CTAS または ITAS クエリに基づいて計算されます。
例
ANALYZE TABLE <original_table_name>
ANALYZE TABLE
コマンドを使用した後に使用できる統計計算のリストを以下に示します。-
field
data-type
count
distinct-count
missing
max
min
mean
stdev
データレイクの統計を計算 compute-statistics-data-lake
COMPUTE STATISTICS
SQL コマンドを使用して、Azure Data Lake Storage (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 セッション間でアクセスすることはできません。制限事項:
- 統計の生成は、配列またはマップのデータタイプではサポートされていません
- 計算された統計は、セッションをまたいで保持 されません。
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 クエリサービスは、近似クエリ処理機能の一部としてサンプルデータセットを提供します。
データセットのサンプルは、データセットに対する集計操作に対して正確な回答が必要ない場合に最適に使用されます。 近似クエリを発行して近似回答を返すことで、大規模なデータセットに対するより効率的な探索的クエリを実行するには、TABLESAMPLE
機能を使用します。
サンプルデータセットは、元のレコードのパーセンテージのみを使用して、既存の Azure Data Lake Storage (ADLS)データセットからの均一なランダムサンプルを使用して作成されます。 データセットサンプル機能は、TABLESAMPLE
および SAMPLERATE
SQL コマンドで ANALYZE TABLE
コマンドを拡張します。
次の例では、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
name
query
SELECT
または VALUES
コマンド。EXECUTE
EXECUTE
コマンドは、事前に準備された文を実行するために使用します。 準備済み文はセッション中にのみ存在するので、準備済み文は現在のセッションの前に実行された PREPARE
文によって作成されている必要があります。 準備文の使用について詳しくは、PREPARE
のコマンドの節を参照しください。
ステートメントを作成した PREPARE
ステートメントで一部のパラメーターが指定された場合は、互換性のあるパラメーターセットを EXECUTE
ステートメントに渡す必要があります。 これらのパラメーターが渡されない場合、エラーが発生します。
EXECUTE name [ ( parameter ) ]
name
parameter
EXPLAIN
EXPLAIN
コマンドは、指定された文の実行計画を表示します。 実行計画は、ステートメントによって参照されるテーブルのスキャン方法を示します。 複数のテーブルが参照されている場合、各入力テーブルから必要な行をまとめるために使用される結合アルゴリズムが表示されます。
EXPLAIN statement
応答の形式を定義するには、FORMAT
キーワードを EXPLAIN
コマンドと共に使用します。
EXPLAIN FORMAT { TEXT | JSON } statement
FORMAT
FORMAT
コマンドを使用して、出力形式を指定します。 使用可能なオプションは、TEXT
または JSON
です。 テキスト以外の出力には、テキスト出力形式と同じ情報が含まれますが、プログラムの解析が容易です。このパラメーターのデフォルトは TEXT
です。statement
SELECT
、INSERT
、UPDATE
、DELETE
、VALUES
、EXECUTE
、DECLARE
、CREATE TABLE AS
または CREATE MATERIALIZED VIEW AS
文。SELECT
ステートメントが返す出力は、EXPLAIN
キーワードを指定して実行すると破棄されます。 その他の副作用は通常通り発生します。例
次の例は、integer
列が 1 行と 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_rows
cursor_name
PREPARE prepare
PREPARE
コマンドを使用すると、準備済み文を作成できます。 準備済み文は、類似の SQL 文をテンプレート化するために使用できるサーバー側オブジェクトです。
準備済みステートメントは、パラメーター(実行時にステートメントに置き換えられる値)を取ることができます。 プリペアドステートメントを使用する場合、パラメーターは$1、$2 などを使用して、位置によって参照されます。
オプションで、パラメーターデータタイプのリストを指定できます。 パラメーターのデータタイプがリストされていない場合、タイプはコンテキストから推論できます。
PREPARE name [ ( data_type [, ...] ) ] AS SELECT
name
data_type
ROLLBACK
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
または TEMP
UNLOGGED
new_table
例
次のクエリは、テーブル films
の最近のエントリのみで構成される新しいテーブル films_recent
を作成します。
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
name
SERVER_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']
query
format_name
format_name
は、parquet
、csv
、json
のいずれかです。 デフォルト値は parquet
です。adl://<ADLS_URI>/users/<USER_ID>/acp_foundation_queryService/folder_location/<QUERY_ID>
テーブルの変更 alter-table
ALTER TABLE
コマンドを使用すると、プライマリ・キー制約または外部キー制約を追加または削除したり、テーブルにカラムを追加したりできます。
制約を追加またはドロップ
次の SQL クエリは、テーブルに制約を追加または削除する例を示しています。 プライマリキーと外部キーの制約は、コンマ区切り値で複数の列に追加できます。 以下の例に示すように、2 つ以上の列名の値を渡すことによって、複合キーを作成できます。
プライマリキーまたは複合キーの定義
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_name
column_name
referenced_table_name
primary_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)を使用してテーブルに列を追加するために許可されるデータタイプを示します。
bigint
int8
bigint
integer
int4
integer
smallint
int2
smallint
tinyint
int1
tinyint
varchar(len)
string
varchar(len)
varchar
は、列データエントリのサイズが大幅に異なる場合に最適です。double
float8
double precision
FLOAT8
および FLOAT
は、DOUBLE PRECISION
の有効な同義語です。 double precision
は浮動小数点データ型です。 浮動小数点値は 8 バイトで格納されます。double precision
float8
double precision
FLOAT8
は double precision
の有効な同義語です。double precision
は浮動小数点データ型です。 浮動小数点値は 8 バイトで格納されます。date
date
date
date
のデータタイプは、タイムスタンプ情報を含まない 4 バイトの格納されたカレンダー日付値です。 有効な日付の範囲は、01-01-0001 ~ 12-31-9999 です。datetime
datetime
datetime
datetime
には、年、月、日、時間、秒、分数の修飾子が含まれます。 datetime
宣言には、これらの時間単位のサブセットを含めることができ、この順序で結合することも、1 つの時間単位のみで構成することもできます。char(len)
string
char(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_name
column_name
data_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