本文档提供了有关查询服务的常见问题解答,并提供了使用查询服务时常见错误代码的列表。 有关Adobe Experience Platform中其他服务的相关问题和疑难解答,请参阅 Experience Platform疑难解答指南.
以下常见问题解答列表分为以下几类:
本节包含有关性能、限制和流程的信息。
+++回答否。 编辑器当前不支持关闭自动完成功能。
+++
+++回答一个潜在原因是自动完成功能。 该功能会处理某些元数据命令,这些命令有时会在查询编辑期间减慢编辑器速度。
+++
+++回答是,您可以使用Postman(一个免费的第三方应用程序)可视化所有AdobeAPI服务并与之交互。 观看 Postman设置指南 有关如何在Adobe Developer控制台中设置项目并获取所有必要凭据以与Postman一起使用的分步说明。 请参阅 有关启动、运行和共享Postman集合的指导.
+++
+++回答是,查询服务在内部应用50,000行的限制,除非在外部指定明确的限制。 请参阅 交互式查询执行 以了解更多详细信息。
+++
+++回答否。 数据大小没有限制,但是交互式会话的查询超时限制为10分钟。 如果查询以批量CTAS形式执行,则不适用10分钟超时。 请参阅 交互式查询执行 以了解更多详细信息。
+++
SELECT * FROM customers LIMIT 0;
+++回答否。 查询服务具有自动缩放功能,可确保并发查询不会对服务性能产生任何显着影响。
+++
有关 如何使用嵌套数据结构 使用查询编辑器或第三方客户端。
+++回答要提高包含数组的数据集上的查询性能,您应该 引爆阵列 as a CTAS查询 在运行时,然后进一步探索它,以寻找改进其处理时间的机会。
+++
处理过程中查询卡住的原因可能有多种。 要确定确切原因,需要逐个案例进行深入分析。 联系Adobe客户支持 这个过程。
Adobe客户支持电话号码的完整列表 可在Adobe帮助页面上找到。 或者,也可以通过完成以下步骤在线找到帮助:
此时会显示包含 帮助和支持 中。 选择 联系我们 要打开Adobe客户关怀虚拟助理,请选择 企业支持 为大型组织提供专门帮助。
请参阅 匿名块文档 以了解更多详细信息。
+++回答是,您可以使用预准备语句模板化查询。 准备的语句可以优化性能并避免重复重新解析查询。 请参阅 准备陈述文档 以了解更多详细信息。
+++
使用GET命令检索多个查询。 有关如何对API进行调用的信息,请参阅 示例API调用文档.
在响应中,确定要调查的查询,然后使用其发出另一个GET请求 id
值。 有关完整说明,请参阅 按ID文档检索查询.
成功响应会返回HTTP状态200,并包含 errors
数组。 为简便起见,缩短了响应。
{
"isInsertInto": false,
"request": {
"dbName": "prod:all",
"sql": "SELECT *\nFROM\n accounts\nLIMIT 10\n"
},
"clientId": "8c2455819a624534bb665c43c3759877",
"state": "SUCCESS",
"rowCount": 0,
"errors": [{
'code': '58000',
'message': 'Batch query execution gets : [failed reason ErrorCode: 58000 Batch query execution gets : [Analysis error encountered. Reason: [sessionId: f055dc73-1fbd-4c9c-8645-efa609da0a7b Function [varchar] not defined.]]]',
'errorType': 'USER_ERROR'
}],
"isCTAS": false,
"version": 1,
"id": "343388b0-e0dd-4227-a75b-7fc945ef408a",
}
的 查询服务API参考文档 提供有关所有可用端点的更多信息。
以下示例演示了CTAS语法和struct数据类型的用法:
CREATE TABLE table_name WITH (SCHEMA='schema_name')
AS SELECT '1' as _id,
STRUCT
('2021-02-17T15:39:29.0Z' AS taskActualCompletionDate,
'2020-09-09T21:21:16.0Z' AS taskActualStartDate,
'Consulting' AS taskdescription,
'5f6527c10011e09b89666c52d9a8c564' AS taskguide,
'Stakeholder Consulting Engagement' AS taskname,
'2020-09-09T15:00:00.0Z' AS taskPlannedStartDate,
'2021-02-15T11:00:00.0Z' AS taskPlannedCompletionDate
) AS _workfront ;
+++回答 SNAPSHOT
子句可用于基于快照ID增量读取表上的数据。 这非常适合与 增量负载 设计模式,仅处理自上次加载执行以来创建或修改的数据集中的信息。 因此,它提高了处理效率,并可用于流和批量数据处理。
+++
查询包含历史数据,而UI仅显示当前用户档案数据。
WHERE
子句,直到您开始看到一些数据。您还可以使用小查询确认数据集包含数据,例如:
SELECT count(1) FROM myTableName
+++回答此功能当前正在进行中。 详情请参阅 发行说明 以及在该功能准备就绪以供发布后,通过Platform UI对话框。
+++
+++应答查询服务提供了多个内置SQL帮助程序函数来扩展SQL功能。 有关 查询服务支持的SQL函数.
+++
您还应查看相关文档,以获取有关如何执行操作的指导 UI中的计划查询 通过 API.
以下是使用 Query Editor. 它们不适用于 Query Service API:
您只能向已创建、保存和运行的查询添加计划。
您 无法 向参数化查询添加计划。
计划查询 无法 包含匿名块。
您只能计划 one 使用UI查询模板。 如果要向查询模板添加其他计划,则需要使用API。 如果已使用API添加计划,则您将无法使用UI添加其他计划。
+++回答“已达到会话限制”表示已达到您的组织允许的查询服务会话数上限。 请与贵组织的Adobe Experience Platform管理员联系。
+++
+++应答查询服务从不删除查询历史记录。 这意味着任何引用已删除数据集的查询都将因此返回“无有效数据集”。
+++
SELECT * FROM <table> WHERE 1=0
例如,您可以创建临时表:
CREATE temp TABLE temp_dataset AS
SELECT *
FROM actual_dataset
WHERE 1 = 0;
然后,您可以按如下方式使用临时表:
INSERT INTO temp_dataset
SELECT a._company AS _company,
a._id AS _id,
a.timestamp AS timestamp
FROM actual_dataset a
WHERE timestamp >= TO_TIMESTAMP('2021-01-21 12:00:00')
AND timestamp < TO_TIMESTAMP('2021-01-21 13:00:00')
LIMIT 100;
2021-12-22T19:52:05Z
查询服务支持内置的SQL函数,以将给定时间戳转换为UTC格式和从UTC格式转换为SQL函数。 和 to_utc_timestamp()
和 from_utc_timestamp()
方法采用两个参数:时间戳和时区。
参数 | 描述 |
---|---|
时间戳 | 时间戳可以采用UTC格式或简单格式写入 {year-month-day} 格式。 如果未提供时间,则默认值为给定日期上午的午夜。 |
时区 | 时区以 {continent/city}) 格式。 它必须是 公域TZ数据库. |
的 to_utc_timestamp()
方法解释给定参数并转换它 到本地时区的时间戳 UTC格式。 例如,韩国首尔的时区是UTC/GMT +9小时。 通过提供仅限日期的时间戳,方法会使用上午的默认值“午夜”。 时间戳和时区将转换为UTC格式,从该区域的时间转换为本地区域的UTC时间戳。
SELECT to_utc_timestamp('2021-08-31', 'Asia/Seoul');
查询在用户的本地时间中返回时间戳。 在这种情况下,首尔会提前9小时,前一天下午3点。
2021-08-30 15:00:00
再举一个示例,如果给定的时间戳是 2021-07-14 12:40:00.0
对于 Asia/Seoul
时区,返回的UTC时间戳为 2021-07-14 03:40:00.0
查询服务UI中提供的控制台输出是一种更易读的格式:
8/30/2021, 3:00 PM
的 from_utc_timestamp()
方法解释给定参数 从本地时区的时间戳 和以UTC格式提供所需区域的等效时间戳。 在以下示例中,小时为用户本地时区中的下午2:40。 作为变量传递的首尔时区比本地时区提前九小时。
SELECT from_utc_timestamp('2021-08-31 14:40:00.0', 'Asia/Seoul');
查询会为作为参数传递的时区返回UTC格式的时间戳。 结果会比运行查询的时区早九小时。
8/31/2021, 11:40 PM
日期字符串 必须 格式 yyyy-mm-ddTHH24:MM:SS
.
使用时间戳过滤器的示例如下所示:
SELECT a._company AS _company,
a._id AS _id,
a.timestamp AS timestamp
FROM dataset a
WHERE timestamp >= To_timestamp('2021-01-21 12:00:00')
AND timestamp < To_timestamp('2021-01-21 13:00:00')
CAST
运算符来转换SQL查询中的时间戳?CAST
运算符来转换时间戳,您需要同时包含这两个日期 和 时间。例如,如下所示,缺少时间组件将导致错误:
SELECT * FROM ABC
WHERE timestamp = CAST('07-29-2021' AS timestamp)
正确使用 CAST
运算符如下所示:
SELECT * FROM ABC
WHERE timestamp = CAST('07-29-2021 00:00:00' AS timestamp)
+++回答您不能使用通配符从行中获取所有数据,因为查询服务应当被视为 柱状存储 而不是传统的基于行的存储系统。
+++
NOT IN
?NOT IN
运算符通常用于检索未在其他表或SQL语句中找到的行。 此运算符可能会降低性能,如果正在比较的列接受,则可能会返回意外结果 NOT NULL
,或者您有大量记录。而不是使用 NOT IN
,则可以使用 NOT EXISTS
或 LEFT OUTER JOIN
.
例如,如果您创建了以下表:
CREATE TABLE T1 (ID INT)
CREATE TABLE T2 (ID INT)
INSERT INTO T1 VALUES (1)
INSERT INTO T1 VALUES (2)
INSERT INTO T1 VALUES (3)
INSERT INTO T2 VALUES (1)
INSERT INTO T2 VALUES (2)
如果您使用 NOT EXISTS
运算符,您可以使用 NOT IN
运算符:
SELECT ID FROM T1
WHERE NOT EXISTS
(SELECT ID FROM T2 WHERE T1.ID = T2.ID)
或者,如果您使用 LEFT OUTER JOIN
运算符,您可以使用 NOT IN
运算符:
SELECT T1.ID FROM T1
LEFT OUTER JOIN T2 ON T1.ID = T2.ID
WHERE T2.ID IS NULL
本节提供有关导出数据和限制的信息。
使用PSQL客户端时,有两种方法可保存查询结果。 您可以使用 COPY TO
命令或使用以下格式创建语句:
SELECT column1, column2
FROM <table_name>
\g <table_name>.out
关于使用 COPY TO
命令 可在SQL语法参考文档中找到。
+++回答否。 目前没有可用于提取摄取数据的功能。
+++
本节包含有关使用第三方工具(如PSQL和Power BI)的信息。
+++回答是,您可以将多个第三方桌面客户端连接到查询服务。 请参阅相关文档 有关可用客户端以及如何将它们连接到查询服务的完整详细信息.
+++
+++回答是,第三方桌面客户端可以通过一次性设置未过期的凭据连接到查询服务。 未过期的凭据可由授权用户生成,并将在下载到其本地计算机的JSON文件中接收这些凭据。 完整 有关如何创建和下载未过期的凭据的指导 可在文档中找到。
+++
+++回答任何PSQL或 Postgres 符合客户端规范可连接到查询服务编辑器。 请参阅相关文档 将客户端连接到查询服务 以获取可用说明列表。
+++
+++回答是,您可以将Power BI连接到查询服务。 请参阅相关文档 有关将Power BI桌面应用程序连接到查询服务的说明.
+++
如果要缩短功能板的响应时间,您应当实施Business Intelligence(BI)服务器作为查询服务和BI工具之间的缓存层。 通常,大多数BI工具都为服务器提供附加服务。
添加缓存服务器层的目的是缓存来自查询服务的数据,并利用这些数据对功能板来加速响应。 这是可能的,因为每天都会在BI服务器中缓存执行查询的结果。 然后,缓存服务器会向具有相同查询的任何用户提供这些结果,以减少延迟。 有关此设置的说明,请参阅您所使用的实用工具或第三方工具的文档。
+++答案否,不支持pgAdmin连接。 A 可用的第三方客户端列表以及如何将它们连接到查询服务的说明 可在文档中找到。
+++
下表提供了PSQL错误代码及其可能的原因。
错误代码 | 连接状态 | 描述 | 可能的原因 |
---|---|---|---|
08P01 | 不适用 | 不支持的消息类型 | 不支持的消息类型 |
2001年2月28日 | 启动 — 身份验证 | 密码无效 | 身份验证令牌无效 |
28000 | 启动 — 身份验证 | 授权类型无效 | 授权类型无效。 必须为 AuthenticationCleartextPassword . |
42P12 | 启动 — 身份验证 | 未找到表 | 未找到要使用的表 |
42601 | 查询 | 语法错误 | 命令或语法错误无效 |
42P01 | 查询 | 未找到表 | 在查询中指定的表未找到 |
42P07 | 查询 | 表存在 | 已存在同名表(创建表) |
53400 | 查询 | LIMIT超出最大值 | 用户指定的LIMIT子句大于100,000 |
53400 | 查询 | 语句超时 | 提交的实时声明最多需要10分钟 |
58000 | 查询 | 系统错误 | 内部系统故障 |
0A000 | 查询/命令 | 不支持 | 查询/命令中的特性/功能不受支持 |
42501 | 拖放表查询 | 删除查询服务未创建的表 | 正在删除的表不是由查询服务使用 CREATE TABLE 语句 |
42501 | 拖放表查询 | 表未由经过身份验证的用户创建 | 正在删除的表不是由当前已登录的用户创建的 |
42P01 | 拖放表查询 | 未找到表 | 未找到查询中指定的表 |
42P12 | 拖放表查询 | 找不到的表 dbName :请检查 dbName |
在当前数据库中未找到表 |
history_meta()
方法用于从数据集访问快照。 以前,如果要在Azure数据湖存储(ADLS)的空数据集上运行查询,您将收到一个58000错误代码,指出数据集不存在。 下面显示了旧系统错误的示例。ErrorCode: 58000 Internal System Error [Invalid table your_table_name. historyMeta can be used on datalake tables only.]
发生此错误是因为查询没有返回值。 此行为现已修复,可返回以下消息:
Query complete in {timeframe}. 0 rows returned.
下表提供了HTTP错误代码及其可能的原因。
HTTP状态代码 | 描述 | 可能的原因 |
---|---|---|
400 | 错误请求 | 查询格式错误或非法 |
401 | 身份验证失败 | 身份验证令牌无效 |
500 | 内部服务器错误 | 内部系统故障 |