添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

您可以在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 ]
              
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;
            
BETWEEN start_snapshot_id AND end_snapshot_id
读取指定的开始快照ID和结束快照ID之间的数据。 它不包括start_snapshot_id且包括end_snapshot_id
BETWEEN HEAD AND start_snapshot_id
将数据从开头(第一个快照之前)读取到指定的启动快照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中读取从指定的快照ID开始的数据,并将其与来自table_to_be_joined的数据联接,因为它位于your_chosen_snapshot_id。 该连接基于来自要连接的两个表的ID列的匹配ID。

SNAPSHOT子句与表或表别名一起使用,但不能在子查询或视图的顶部。 SNAPSHOT子句适用于对表应用SELECT查询的任何位置。

此外,还可以使用HEADTAIL作为快照子句的特殊偏移值。 使用HEAD是指第一个快照之前的偏移量,而TAIL是指最后一个快照之后的偏移量。

如果在两个快照ID之间进行查询,如果启动快照已过期且设置了可选的回退行为标志(resolve_fallback_snapshot_on_failure),则可能会出现以下两种情况:
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
        

创建表作为选择 create-table-as-select

使用CREATE TABLE AS SELECT (CTAS)命令将SELECT查询的结果实体化为新表。 这有助于在模型中使用特征工程数据之前创建转换的数据集、执行聚合或预览特征工程数据。

如果您已准备好使用转换的功能训练模型,请参阅模型文档以了解有关将CREATE MODELTRANSFORM子句结合使用的指导。

您可以选择包含TRANSFORM子句以直接在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)
            
transform
(可选)在具体化数据集之前应用特征工程转换(如字符串索引、单热编码或TF-IDF)。 此子句用于预览转换后的特征。 有关详细信息,请参阅TRANSFORM子句文档
select_query
定义数据集的标准SELECT语句。 有关详细信息,请参阅SELECT查询部分
SELECT语句必须包含聚合函数(如COUNTSUMMIN)的别名。 您可以提供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;
                
  • 如果有任何变换函数生成矢量输出,则它会自动转换为数组。
  • 因此,使用TRANSFORM创建的表不能直接在CREATE MODEL语句中使用。 必须在模型创建期间重新定义转换逻辑,以生成相应的特征向量。
  • 转换仅在表创建期间应用。 插入到具有INSERT INTO的表中的新数据是​ 未自动转换。 要将转换应用到新数据,必须使用带有TRANSFORM子句的CREATE TABLE AS SELECT重新创建表。
  • 此方法旨在预览和验证某个时间点的转换,而不是构建可重用的转换管道。
  • TRANSFORM子句 transform

    使用TRANSFORM子句在模型训练或表创建之前将一个或多个功能工程函数应用到数据集。 此子句允许您预览、验证或定义输入特征的确切形状。

    TRANSFORM子句可用于以下语句:

    有关使用CREATE MODEL的详细说明,包括如何定义转换、设置模型选项和配置训练数据,请参阅模型文档

    有关CREATE TABLE的使用情况,请参阅CREATE TABLE AS SELECT部分

    创建模型示例

    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;
                
    请​ ​将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]
            

    创建视图 create-view

    SQL视图是基于SQL语句的结果集的虚拟表。 使用CREATE VIEW语句创建视图并为其命名。 然后,您可以使用该名称来引用回查询的结果。 这使得重复使用复杂的查询更加容易。

    以下语法为数据集定义了CREATE VIEW查询。 此数据集可以是ADLS或加速存储数据集。

    CREATE VIEW view_name AS select_query
                  
     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)
                  
    $$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

    当条件被评估为TRUE时,IF-THEN-ELSE控制结构允许有条件地执行语句列表。 此控制结构仅适用于匿名块。 如果此结构用作独立命令,则会导致语法错误(“匿名块外部的命令无效”)。

    下面的代码段演示了匿名块中IF-THEN-ELSE条件语句的正确格式。

    IF booleanExpression THEN
       List of statements;
    ELSEIF booleanExpression THEN
       List of statements;
    ELSEIF booleanExpression THEN
       List of statements;
       List of statements;
    END IF
            

    自动转换为JSON auto-to-json

    查询服务支持可选会话级别设置,以便从JSON字符串形式的交互式SELECT查询返回顶级复杂字段。 auto_to_json设置允许将复杂字段中的数据作为JSON返回,然后使用标准库解析为JSON对象。

    在执行包含复杂字段的SELECT查询之前,将功能标志auto_to_json设置为true。

    set auto_to_json=true;
                  
                    _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)
                  
                    _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过期的问题。

    resolve_fallback_snapshot_on_failure选项设置为true以使用以前的快照ID覆盖快照。

    SET resolve_fallback_snapshot_on_failure=true;
                  
    $$ 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';
            

    数据资产组织

    随着数据资产的增长,在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功能简化了编写匿名块以涵盖CREATEINSERT 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';
            

    要返回任何设置的值,请使用不带property_valueSET [property key]

    PostgreSQL命令

    以下子部分介绍了查询服务支持的PostgreSQL命令。

    分析表 analyze-table

    ANALYZE TABLE命令对命名表执行分布分析和统计计算。 根据数据集是存储在加速存储还是数据湖中,ANALYZE TABLE的使用会有所不同。 有关其使用的更多信息,请参阅各自的部分。

    加速存储的计算统计信息 compute-statistics-accelerated-store

    ANALYZE TABLE命令计算加速存储上表的统计信息。 统计信息是在加速存储上给定表的已执行CTAS或ITAS查询中计算的。

    ANALYZE TABLE <original_table_name>
            

    计算数据湖上的统计信息 compute-statistics-data-lake

    您现在可以使用COMPUTE STATISTICS SQL命令计算Azure Data Lake Storage (ADLS)数据集的列级统计信息。 计算整个数据集、数据集子集、所有列或列子集的列统计信息。

    COMPUTE STATISTICS扩展ANALYZE TABLE命令。 但是,加速存储表上不支持COMPUTE STATISTICSFILTERCONTEXTFOR COLUMNS命令。 当前,只有ADLS表支持ANALYZE TABLE命令的这些扩展。

    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);
                  
          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)数据集的统一随机样本创建样本数据集,仅使用来自原始数据集的记录百分比。 数据集示例功能使用TABLESAMPLESAMPLERATE SQL命令扩展ANALYZE TABLE命令。

    在下面的示例中,第一行演示如何计算表格的5%样本。 第二行演示如何从表中数据的过滤视图中计算5%的样本。

    ANALYZE TABLE tableName TABLESAMPLE SAMPLERATE 5;
    ANALYZE TABLE tableName FILTERCONTEXT (timestamp >= to_timestamp('2023-01-01')) TABLESAMPLE SAMPLERATE 5:
            

    EXECUTE命令用于执行以前准备的语句。 由于预准备语句仅存在于会话期间,因此预准备语句必须由在当前会话中较早执行的PREPARE语句创建。 有关使用预准备语句的详细信息,请参阅PREPARE命令部分。

    如果创建该语句的PREPARE语句指定了某些参数,则必须将一组兼容的参数传递到EXECUTE语句。 如果未传入这些参数,则会引发错误。

    EXECUTE name [ ( parameter ) ]
                
    FORMAT
    使用FORMAT命令指定输出格式。 可用选项为TEXTJSON。 非文本输出包含的信息与文本输出格式相同,但程序更容易解析。 此参数默认为TEXT
    statement
    要查看其执行计划的任何SELECTINSERTUPDATEDELETEVALUESEXECUTEDECLARECREATE TABLE ASCREATE MATERIALIZED VIEW AS语句。
                           QUERY PLAN
    ---------------------------------------------------------
     Seq Scan on foo (dataSetId = "6307eb92f90c501e072f8457", dataSetName = "foo") [0,1000000242,6973776840203d3d,6e616c58206c6153,6c6c6f430a3d4d20,74696d674c746365]
    (1 row)
            

    准备 prepare

    使用PREPARE命令可以创建预准备语句。 预准备语句是服务器端对象,可用于对类似的SQL语句进行模板化。

    预准备语句可以接受参数,这些参数是在执行语句时替换到该语句中的值。 在使用预准备语句时,参数由位置引用,使用$1、$2等。

    或者,您可以指定参数数据类型的列表。 如果未列出参数的数据类型,则可以从上下文推断该类型。

    PREPARE name [ ( data_type [, ...] ) ] AS 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 ] [...] ]
                
    您希望了解其信息的运行时参数的名称。 运行时参数的可能值包括以下值:
    SERVER_VERSION:此参数显示服务器的版本号。
    SERVER_ENCODING:此参数显示服务器端字符集编码。
    LC_COLLATE:此参数显示用于归类(文本排序)的数据库区域设置。
    LC_CTYPE:此参数显示数据库的字符分类区域设置。
    IS_SUPERUSER:此参数显示当前角色是否具有超级用户权限。
    显示所有配置参数的值及其说明。

    以下查询显示参数DateStyle的当前设置。

    SHOW DateStyle;
                
    完整的输出路径为adl://<ADLS_URI>/users/<USER_ID>/acp_foundation_queryService/folder_location/<QUERY_ID>

    更改表 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
                  
    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 )
                  
    ALTER TABLE table_name ADD CONSTRAINT PRIMARY IDENTITY ( column_name ) NAMESPACE namespace
    ALTER TABLE table_name ADD CONSTRAINT IDENTITY ( column_name ) NAMESPACE namespace
                  
    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 )
            
    支持的数据类型

    下表列出了用于向Azure SQL中具有Postgres SQL、XDM和Accelerated Database Recovery (ADR)的表添加列的接受数据类型。

    PSQL客户端
    bigint
    bigint
    一种数值数据类型,用于存储从 — 9,223,372,036,854,775,807到9,223,372,036,854,775,807之间的大整数,以8字节为单位。
    integer
    integer
    用于存储 — 2,147,483,648到2,147,483,647 (以4字节为单位)的整数的数字数据类型。
    smallint
    smallint
    用于存储–32,768到215-1 32,767之间的整数(以2字节为单位)的数字数据类型。
    tinyint
    tinyint
    用于存储0到255之间的整数(以1字节为单位)的数字数据类型。
    varchar(len)
    string
    varchar(len)
    可变大小的字符数据类型。 当列数据项的大小差别很大时,最好使用varchar
    double
    float8
    double precision
    FLOAT8FLOATDOUBLE PRECISION的有效同义词。 double precision是浮点数据类型。 浮点值以8字节为单位存储。
    double precision
    float8
    double precision
    FLOAT8double precision的有效同义词。double precision是浮点数据类型。 浮点值以8字节为单位存储。
    date数据类型是4字节存储的日历日期值,没有任何时间戳信息。 有效日期的范围为01-01-0001到12-31-9999。
    datetime
    datetime
    datetime
    一种数据类型,用于存储以日历日期和时间表示的时间瞬间。 datetime包含限定符:年、月、日、小时、秒和分数。 datetime声明可以包括在该序列中连接这些时间单位的任何子集,或者甚至只包括单个时间单位。
    char(len)
    string
    char(len)
    char(len)关键字用于指示该项为固定长度字符。
    data_type
    要添加列的数据类型。 支持的数据类型包括:bigint、char、string、date、datetime、double、double precision、integer、smallint、tinyint、varchar。

    SHOW PRIMARY KEYS命令列出给定数据库的所有主键约束。

    SHOW PRIMARY KEYS
                  
        tableName | columnName    | datatype | namespace
    ------------------+----------------------+----------+-----------
     table_name_1 | column_name1  | text     | "ECID"
     table_name_2 | column_name2  | text     | "AAID"
                  
        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"
                  
       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
                  
       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