Query Service 疑难解答指南

本文档提供了有关查询服务的常见问题解答,并提供了使用查询服务时常见错误代码的列表。 有关Adobe Experience Platform中与其他服务相关的问题和疑难解答,请参阅Experience Platform疑难解答指南

常见问题

以下是有关查询服务的常见问题解答列表。

如何仅获取查询的元数据?

要仅获取查询的元数据,您可以运行返回零行的查询,如下所示:

SELECT * FROM <table> WHERE 1=0

此查询仅返回指定表的元数据。

如何快速地在CTAS(Create Table as Select)查询上进行迭代而不对其进行具体化?

您可以创建临时表,以在对查询进行实物化以供使用之前,快速对该查询进行迭代和实验。 您还可以使用临时表来验证查询是否可正常运行。

例如,您可以创建临时表:

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;

如何过滤我的时间序列数据?

使用时间序列数据进行查询时,应尽可能使用时间戳筛选器以进行更准确的分析。

注意

日期字符串​必须​的格式为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')

我是否应使用通配符(如*)从数据集获取所有行?

不能使用通配符从行中获取所有数据,因为查询服务应当被视为​colum-store,而不是传统的基于行的存储系统。

我应该在SQL查询中使用NOT IN吗?

NOT IN运算符通常用于检索未在其他表或SQL语句中找到的行。 此运算符可能会降低性能,如果正在比较的列接受NOT NULL,或者您有大量记录,则可能会返回意外结果。

您可以使用NOT EXISTSLEFT OUTER JOIN,而不是使用NOT IN

例如,如果您创建了以下表:

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

ORUNION运算符的正确用法是什么?

如何正确使用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)

REST API错误

HTTP状态代码 描述 可能的原因
400 错误请求 查询格式错误或非法
401 身份验证失败 身份验证令牌无效
500 内部服务器错误 内部系统故障

PostgreSQL API错误

错误代码 连接状态 描述 可能的原因
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 在当前数据库中未找到表

在此页面上