本文档提供了有关查询服务的常见问题解答,并提供了使用查询服务时常见错误代码的列表。 有关Adobe Experience Platform中其他服务的相关问题和疑难解答,请参阅 Experience Platform疑难解答指南.
以下常见问题解答列表分为以下几类:
本节包含有关性能、限制和流程的信息。
+++回答否。 编辑器当前不支持关闭自动完成功能。
+++
+++回答一个潜在原因是自动完成功能。 该功能会处理某些元数据命令,这些命令有时会在查询编辑期间减慢编辑器速度。
+++
+++回答是,您可以使用可视化图表和与所有AdobeAPI服务进行交互 Postman (免费的第三方应用程序)。 观看 Postman 设置指南 有关如何在Adobe Developer控制台中设置项目并获取所有必要凭据以供使用的分步说明 Postman. 请参阅 关于启动、运行和共享的指导 Postman 收藏集.
+++
+++回答是,查询服务在内部应用50,000行的限制,除非在外部指定明确的限制。 请参阅 交互式查询执行 以了解更多详细信息。
+++
+++回答批量查询中,不支持更新数据集内的行。
+++
+++回答否。 数据大小没有限制,但是交互式会话的查询超时限制为10分钟。 如果查询以批量CTAS形式执行,则不适用10分钟超时。 请参阅 交互式查询执行 以了解更多详细信息。
+++
SELECT * FROM customers LIMIT 0;
+++回答否。 查询服务具有自动缩放功能,可确保并发查询不会对服务性能产生任何显着影响。
+++
+++答案某些保留的关键字不能用作列名称,例如, ORDER
, GROUP BY
, WHERE
, DISTINCT
. 如果要使用这些关键词,则必须对这些列进行转义。
+++
有关 如何使用嵌套数据结构 使用查询编辑器或第三方客户端。
+++回答要提高包含数组的数据集上的查询性能,您应该 引爆阵列 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函数.
+++
+++答案至今,并非所有开源 Spark SQL 已在数据湖数据上测试了函数。 测试和确认后,它们将被添加到受支持列表。 请参阅 受支持列表 Spark SQL 函数 来检查特定函数。
+++
+++回答由于数据安全注意事项,不允许自定义UDF。
+++
您还应查看相关文档,以获取有关如何执行操作的指导 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
test_table_001
。+++答案否,这是跨Experience Platform的有意限制,适用于所有Adobe服务,包括查询服务。 可接受具有两个下划线的名称作为架构和数据集名称,但数据集的表名称只能包含一个下划线。
+++
+++回答由于批处理查询作为后端作业运行,因此不存在查询并发限制。 但是,查询超时限制设置为24小时。
+++
+++回答有监控和警报功能可用于检查查询活动和状态。 请参阅 查询服务审核日志集成 和 查询日志 文档以了解更多信息。
+++
+++回答当前,我们不支持以这种方式回滚或更新。
+++
+++答案查询服务是“全部或全部”解决方案。 无法提供部分访问。
+++
+++回答是,您可以将查询限制为具有只读访问权限的数据集。
+++
+++回答是,支持SSL模式。 请参阅 SSL模式文档 以细分可用的不同SSL模式及其提供的保护级别。
+++
+++回答是。 传输中数据始终符合HTTPS。 当前支持的版本为TLS1.2。
+++
+++回答是,在端口80上建立的连接仍使用SSL。 您还可以使用端口5432。
+++
+++回答是,如果配置了,则强制实施基于属性的访问控制。 请参阅 基于属性的访问控制概述 以了解更多信息。
+++
+++答案否,查询服务不支持“INSERT OVERWRITE INTO”命令。
+++
本节提供有关导出数据和限制的信息。
使用PSQL客户端时,有两种方法可保存查询结果。 您可以使用 COPY TO
命令或使用以下格式创建语句:
SELECT column1, column2
FROM <table_name>
\g <table_name>.out
关于使用 COPY TO
命令 可在SQL语法参考文档中找到。
+++回答否。 目前没有可用于提取摄取数据的功能。
+++
SELECT * FROM prod_table LIMIT 1;
应写成:
SELECT * FROM prod_table
WHERE
timestamp >= to_timestamp('2022-07-22')
and timestamp < to_timestamp('2022-07-23');
本节包含有关使用第三方工具(如PSQL和Power BI)的信息。
+++回答是,您可以将多个第三方桌面客户端连接到查询服务。 请参阅相关文档 有关可用客户端以及如何将它们连接到查询服务的完整详细信息.
+++
+++回答是,第三方桌面客户端可以通过一次性设置未过期的凭据连接到查询服务。 未过期的凭据可由授权用户生成,并以JSON文件的形式接收,该文件会自动下载到其本地计算机。 完整 有关如何创建和下载未过期的凭据的指导 可在文档中找到。
+++
technicalAccountID
和 credential
从配置JSON文件中获取。 密码值采用以下形式: {{technicalAccountId}:{credential}}
.有关如何 使用凭据连接外部客户端.
+++回答任何PSQL或 Postgres 符合客户端规范可连接到查询服务编辑器。 请参阅相关文档 将客户端连接到查询服务 以获取可用说明列表。
+++
+++回答是,您可以将Power BI连接到查询服务。 请参阅相关文档 有关将Power BI桌面应用程序连接到查询服务的说明.
+++
如果要缩短功能板的响应时间,您应当实施Business Intelligence(BI)服务器作为查询服务和BI工具之间的缓存层。 通常,大多数BI工具都为服务器提供附加服务。
添加缓存服务器层的目的是缓存来自查询服务的数据,并利用这些数据对功能板来加速响应。 这是可能的,因为每天都会在BI服务器中缓存执行查询的结果。 然后,缓存服务器会向具有相同查询的任何用户提供这些结果,以减少延迟。 有关此设置的说明,请参阅您所使用的实用工具或第三方工具的文档。
+++答案否,不支持pgAdmin连接。 A 可用的第三方客户端列表以及如何将它们连接到查询服务的说明 可在文档中找到。
+++
下表提供了PSQL错误代码及其可能的原因。
错误代码 | 连接状态 | 描述 | 可能的原因 |
---|---|---|---|
08P01 | 不适用 | 不支持的消息类型 | 不支持的消息类型 |
28P01 | 启动 — 身份验证 | 密码无效 | 身份验证令牌无效 |
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 | 内部服务器错误 | 内部系统故障 |