在Query Service中执行查询的一般指导
本文档详细介绍了在Adobe Experience Platform Query Service中编写查询时要了解的重要详细信息。
有关Query Service中使用的SQL语法的详细信息,请阅读SQL语法文档。
查询执行模型
Adobe Experience Platform Query Service有两种查询执行模型:交互式和非交互式。 交互执行用于商务智能工具中的查询开发和报告生成,而非交互执行用于大型作业和作为数据处理工作流一部分的操作查询。
交互式查询执行
可以通过通过Query Service UI提交查询或通过连接的客户端🔗提交以交互方式执行查询。 通过连接的客户端运行Query Service时,在客户端与Query Service之间运行活动会话,直到提交的查询返回或超时。
交互式查询执行具有以下限制:
LIMIT 0
。 10分钟的查询超时仍然适用。默认情况下,交互式查询的结果会返回到客户端,并且 不会 保留。 要将结果作为Experience Platform中的数据集保留,查询必须使用CREATE TABLE AS SELECT
语法。
非交互式查询执行
通过Query Service API提交的查询以非交互方式运行。 非交互执行意味着Query Service接收API调用并按接收顺序执行查询。 非交互式查询始终会在Experience Platform中生成新数据集以接收结果,或在现有数据集中插入新行。
访问对象中的特定字段
要访问查询中对象内的字段,可以使用点表示法(.
)或方括号表示法([]
)。 以下SQL语句使用点表示法将endUserIds
对象向下遍历到mcid
对象。
SELECT endUserIds._experience.mcid
FROM {ANALYTICS_TABLE_NAME}
WHERE endUserIds._experience.mcid IS NOT NULL
AND TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 1
{ANALYTICS_TABLE_NAME}
以下SQL语句使用括号表示法将endUserIds
对象向下遍历到mcid
对象。
SELECT endUserIds['_experience']['mcid']
FROM {ANALYTICS_TABLE_NAME}
WHERE endUserIds._experience.mcid IS NOT NULL
AND TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 1
{ANALYTICS_TABLE_NAME}
上述两个示例查询都返回一个拼合对象,而不是一个值:
endUserIds._experience.mcid
--------------------------------------------------------
(48168239533518554367684086979667672499,"(ECID)",true)
(1 row)
返回的endUserIds._experience.mcid
对象包含以下参数的相应值:
id
namespace
primary
如果仅将该列声明为向下至该对象,则会将整个对象作为字符串返回。 要仅查看ID,请使用:
SELECT endUserIds._experience.mcid.id
FROM {ANALYTICS_TABLE_NAME}
WHERE endUserIds._experience.mcid IS NOT NULL
AND TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 1
endUserIds._experience.mcid.id
----------------------------------------
48168239533518554367684086979667672499
(1 row)
引号
单引号、双引号和后引号在Query Service查询中具有不同的用法。
单引号
单引号('
)用于创建文本字符串。 例如,它可以在SELECT
语句中用于返回结果中的静态文本值,在WHERE
子句中用于计算列的内容。
以下查询为列声明了一个静态文本值('datasetA'
):
SELECT
'datasetA',
timestamp,
web.webPageDetails.name
FROM {ANALYTICS_TABLE_NAME}
WHERE TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
以下查询在其WHERE子句中使用单引号字符串('homepage'
)来返回特定页的事件。
SELECT
timestamp,
endUserIds._experience.mcid.id
FROM {ANALYTICS_TABLE_NAME}
WHERE web.webPageDetails.name = 'homepage'
AND TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
双引号
双引号("
)用于声明带有空格的标识符。
当一列的标识符中包含空格时,以下查询使用双引号返回指定列的值:
SELECT
no_space_column,
"space column"
FROM
( SELECT
'column1' as no_space_column,
'column2' as "space column"
)
后引号
使用点表示法时,后引号`
仅用于转义保留列名 的。 例如,由于order
是SQL中的保留字,因此您必须使用后引号来访问字段commerce.order
:
SELECT
commerce.`order`
FROM {ANALYTICS_TABLE_NAME}
WHERE TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
后引号也用于访问以数字开头的字段。 例如,要访问字段30_day_value
,您需要使用后引号表示法。
SELECT
commerce.`30_day_value`
FROM {ANALYTICS_TABLE_NAME}
WHERE TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
如果使用方括号表示法,则后引号 不需要。
SELECT
commerce['order']
FROM {ANALYTICS_TABLE_NAME}
WHERE TIMESTAMP = to_timestamp('{TARGET_YEAR}-{TARGET_MONTH}-{TARGET_DAY}')
LIMIT 10
查看表信息
连接到查询服务后,您可以使用\d
或SHOW TABLES
命令查看平台上的所有可用表。
标准表格视图
\d
命令显示用于列出表的标准PostgreSQL视图。 此命令的输出示例如下所示:
List of relations
Schema | Name | Type | Owner
--------+-----------------+-------+----------
public | luma_midvalues | table | postgres
public | luma_postvalues | table | postgres
(2 rows)
详细的表视图
SHOW TABLES
命令是一个自定义命令,它提供有关表的更多详细信息。 此命令的输出示例如下所示:
name | dataSetId | dataSet | description | resolved
-----------------+--------------------------+----------------+-------------+----------
luma_midvalues | 5bac030c29bb8d12fa992e58 | Luma midValues | | false
luma_postvalues | 5c86b896b3c162151785b43c | Luma midValues | | false
(2 rows)
架构信息
要查看表中架构的更多详细信息,您可以使用\d {TABLE_NAME}
命令,其中{TABLE_NAME}
是要查看其架构信息的表的名称。
以下示例显示了luma_midvalues
表的架构信息,使用\d luma_midvalues
可以看到该信息:
Table "public.luma_midvalues"
Column | Type | Collation | Nullable | Default
-------------------+-----------------------------+-----------+----------+---------
timestamp | timestamp | | |
_id | text | | |
productlistitems | anyarray | | |
commerce | luma_midvalues_commerce | | |
receivedtimestamp | timestamp | | |
enduserids | luma_midvalues_enduserids | | |
datasource | datasource | | |
web | luma_midvalues_web | | |
placecontext | luma_midvalues_placecontext | | |
identitymap | anymap | | |
marketing | marketing | | |
environment | luma_midvalues_environment | | |
_experience | luma_midvalues__experience | | |
device | device | | |
search | search | | |
此外,您还可以通过将列的名称附加到表名来获取有关特定列的详细信息。 这将以\d {TABLE_NAME}_{COLUMN}
格式编写。
以下示例显示了web
列的附加信息,将使用以下命令调用: \d luma_midvalues_web
:
Composite type "public.luma_midvalues_web"
Column | Type | Collation | Nullable | Default
----------------+-----------------------------------+-----------+----------+---------
webpagedetails | luma_midvalues_web_webpagedetails | | |
webreferrer | web_webreferrer | | |
连接数据集
您可以将多个数据集连接在一起,以在查询中包含来自其他数据集的数据。
以下示例将连接以下两个数据集(your_analytics_table
和custom_operating_system_lookup
),并按页面查看次数为前50个操作系统创建一个SELECT
语句。
查询
SELECT
b.operatingsystem AS OperatingSystem,
SUM(a.web.webPageDetails.pageviews.value) AS PageViews
FROM your_analytics_table a
JOIN custom_operating_system_lookup b
ON a._experience.analytics.environment.operatingsystemID = b.operatingsystemid
WHERE TIMESTAMP >= TO_TIMESTAMP('2018-01-01') AND TIMESTAMP <= TO_TIMESTAMP('2018-12-31')
GROUP BY OperatingSystem
ORDER BY PageViews DESC
LIMIT 50;
结果
删除重复项
查询服务支持重复数据删除,或从数据中删除重复行。 有关重复数据删除的详细信息,请参阅查询服务重复数据删除指南。
查询服务中的时区计算
查询服务使用UTC时间戳格式标准化Adobe Experience Platform中的持久数据。 有关如何将时区要求转换成UTC时间戳和从UTC时间戳转换成的更多信息,请参阅常见问题解答部分,了解如何将时区更改为UTC时间戳,以及从UTC时间戳更改时区。
后续步骤
通过阅读本文档,您已了解使用Query Service编写查询时的一些重要注意事项。 有关如何使用SQL语法编写自己的查询的详细信息,请阅读SQL语法文档。
有关可在查询服务中使用的更多查询示例,请阅读以下用例文档: