IBM Cloud Docs
已知问题(限制)

已知问题(限制)

以下限制和已知问题适用于 IBM® watsonx.data。

虚拟专用网络配置限制

外部引擎不支持专用端点,如 IBM Db2 Warehouse, IBM Netezza,和 IBM Analytics Engine (Spark)。

HDFS 不支持通过 CPDCTL 添加水桶

cpdctl wx-data 插件目前不支持添加 HDFS 数据桶。

IBM watsonx.data Presto Software Hub 5.1.1 及其后的连接器无法连接 IBM watsonx.data 云实例

IBM watsonx.data Presto 由于 520 Cloudflare 错误,连接器无法连接 IBM watsonx.data 实例。 当同时多次调用 GET /engines API 时,尤其是当 watsonx.data 实例有大量策略时,就会出现这个问题。

修改 Spark 引擎主桶的凭据可能会中断数据和操作

在配置过程中更新已被指定为 Spark 引擎主存储桶的存储桶的访问凭证可能会导致数据访问问题和运行故障。

元存储管理员和元存储查看器无法查看模式和表的详细信息

除非为模式和表定义了视图策略,否则在查询工作区和数据管理器中拥有元存储管理员和元存储查看器权限的用户无法查看模式和表的详细信息。

模式演变方案在 Presto (C++) 中失败

删除和/或添加表列时,查询可能会失败。 例如,请参阅下面的语句序列,之后对表的查询就会失败。

   create table ice.s3.tessch.12 (age int, name varchar(25), place varchar(25)
   insert into ice.s3.tessch.t12 values (35, 'ken', 'paris')
   alter table ice.s3.tessch.t12 drop column age
   select * from ice.s3.tessch.t12
   alter table ice.s3.tessch.t8 add column place varchar(25)

解决方法 PARQUET,在会话中运行以下命令:

   set session <catalog-name>.parquet_use_column_names=true;

<catalog-name> 替换为实际使用的目录。

或者在目录属性中设置 hive.parquet.use-column-names=true。 对于 ORC,在目录属性中设置 hive.orc.use-column-names=true

Connection Information 页面显示截断的用户名

Connection Information 页面显示的是截断的用户名,不包括 PowerBILooker 的前缀 ibmlhapikey_

解决方法: 在手动复制值时,将 ibmlhapikey_ 前缀添加到用户名中,以启用与 BI 工具的连接。

Oracle 数据库中使用 WE8ISO8859P9 字符集的土耳其语大写字符 İ 的问题 ( ORA-00911 错误)

在使用 WE8ISO8859P9 字符集的 Oracle 数据库中,在混合大小写特征标志关闭(默认)模式下不支持大写土耳其字符 İ,从而导致 ORA-00911: 无效字符错误。

解决方法: 将混合大小写功能标志设置为“开”。

默认的 information_schema 视图列出了其他目录中的架构和表格

如果用户拥有多个目录,则默认的 information_schema 视图将显示其他目录中的架构和表格,而与引擎关联的目录除外。

Hive 当文件列名读取为小写时,外部列名使用全角大写字母将无法识别

当 presto 工人目录属性文件列名称读取为小写时,它会将 ASCII 大写字母字段名称转换为 ASCII 小写字母。 因此,列名中带有全角大写字符的数据将无法识别,并显示为“空”。

数据录入需要更新证书

如果在数据源连接中遇到问题,请查看证书详细信息,因为当前错误信息不明确。 证书丢失或过期可能是导致问题的原因。

解决方法:您必须保持安全证书的更新,才能进行数据提取。

在写入/删除/更新操作期间,由于ADLS签名过期导致工作失败

Spark作业在ADLS Gen1 存储中执行写/删除/更新操作时出现以下错误。 这是因为ADLS签名在流程中途过期了。 java.io.IOException: Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature

解决方法:将ADLS签名过期时间设置为较大的值。 配置属性,spark.hadoop.spark.hadoop.wxd.cas.sas.expiry.period,以控制ADLS签名过期时间。 将默认值从 300s 更新为 43200s。

Presto CLI 密码大小限制

Presto CLI支持的最大密码长度为1 KB(1024字节)。 如果密码超过此大小,系统将无法在密码字段中接受它;相反,它必须导出。

在升级 watsonx.data Web控制台期间,ORC表不支持timestamptz数据类型

在 Python 笔记本中,Spark引擎无法查询包含连字符或空格的数据库名称,即使添加了适当的Spark访问控制扩展也是如此。

从 IBM 中删除语义自动化层集成后,业务术语仍然保留 watsonx.data

导入到 IBM Knowledge Catalog 用于在 watsonx.data 中集成语义自动化层(SAL)的业务术语在删除集成时不会被删除。 如果随后启用新的SAL集成,并再次上传相同或相似的商务条款,则可能导致商务条款重复。

解决方法:为避免业务术语重复,集群管理员或最初创建SAL注册的用户必须手动删除为SAL集成而导入的所有业务术语。

Apache Phoenix 表上的EXISTS子句在执行查询时产生错误

在 Apache Phoenix 表上使用EXISTS子句的查询可能会意外失败,即使引用的列是有效的。 这是由于 Apache Phoenix 对EXISTS子句的解释存在局限性,特别是在查询结构模糊或错位的情况下。

解决方法:为了解决这个限制,请采用以下策略之一:

  • 在子查询和主查询之间建立明确的关系。 在子查询中引入过滤条件,在子查询和主查询之间建立有意义的关联。 例如,在子查询中,当 department_id_bigint 不为空时。 更多信息,请参考以下示例:

    SELECT DISTINCT t1.first_name_varchar, t2.performance_rating_real, t1.team_head_varchar
    FROM phoenix.tm_lh_engine.employee t1, phoenix.tm_lh_engine.departments t2
    WHERE EXISTS (
       SELECT 1
       FROM phoenix.tm_lh_engine.departments
       WHERE department_id_bigint IS NOT NULL
    )
    
  • 通过在子查询中明确合并表,在相关表之间建立明确的关系。 这确保了子查询与上下文相关,并解决了执行问题。 例如,在子查询中,t3.department_id_bigint = t2.department_id_bigint。 更多信息,请参考以下示例:

    SELECT DISTINCT t1.first_name_varchar, t2.performance_rating_real, t1.team_head_varchar
    FROM phoenix.tm_lh_engine.employee t1, phoenix.tm_lh_engine.departments t2
    WHERE EXISTS (
       SELECT 1
       FROM phoenix.tm_lh_engine.departments t3
       WHERE t3.department_id_bigint = t2.department_id_bigint
    )
    

Hive 目录不支持用于创建表格 int 类型列的 CSV 格式

Hive 目录不支持用于创建表格 int 类型列的 CSV 格式。 显示了以下错误:

presto> create table  hive_data.hive_schema.intcsv ( type int ) with ( format = 'CSV' ) ;
Query 20241017_021409_00059_fmcyt failed: Hive CSV storage format only supports VARCHAR (unbounded). Unsupported columns: type integer

解决方法在 Hive 目录中使用以下选项:

  • 以 varchar.NET创建表格。
  • 创建视图,将列转换为原始数据类型。

不一致的 CSV 和 Parquet 文件摄取行为

尽管设计规范规定,CSV 文件只能被导入到根据 CSV 文件创建的表中,而 parquet 文件只能被导入到根据 parquet 文件创建的表中,但在用户能够将 CSV 文件导入到 parquet 表中的实际行为中却存在差异。 如果 CSV 或 parquet 文件的模式或格式与目标表的预期结构不一致,可能会导致意想不到的结果、数据质量问题或性能问题。

通过用户界面和引擎重启问题在 Presto 资源组中显示无效文件关联

通过 watsonx.data 用户界面为 Presto 资源组中的引擎关联无效文件时,引擎将重新启动。 但是,用户界面可能会错误地显示引擎正在使用新分配的文件。

解决方法: 如果您发现新文件与 watsonx.data 环境无关,请联系 IBM 支持以获得进一步帮助。

Hive 和 Iceberg 中的时间数据类型支持

Hive: Hive 目录本机不支持时间数据类型。

冰山Iceberg 支持时间数据类型。

解决方法:为了在Iceberg表格中正确处理时间数据,必须将 hive.parquet-batch-read-optimization-enabled 属性设置为 false

不同模式的文件会导致空值

watsonx.data 现在支持以不同模式摄取受支持的文件类型。 但是,当这些文件中的列具有不同的模式时,这些列中的值将被设置为空。

模式和表创建中不支持的特殊字符

创建模式和表时不支持以下特殊字符:

模式( Hive 和Iceberg):$^+?*{[()/

表格 ( Hive ): $, ^, +, ?, *, {, [, (, ),和 /. (在以特殊字符 @ 开头的模式名称中创建表格会导致错误)。

表格(冰山):$^+?*{[()/@

建议不要在表格、列和架构名称中使用特殊字符,例如问号(?)、连字符(-)、星号(*)或分隔符(如:\r、 \n 和\t)。 虽然这些特殊字符是受支持的,并且可以创建表、列和模式,但在运行INSERT命令或应用访问策略时,使用它们可能会导致问题。

为确保体验顺畅,请遵循以下步骤:

  • 架构名称可以包含字母、数字或以下任意一个:!#&]}<>=%@
  • 表名可以包含字母、数字或 !#&]}<>=; 中的任意一个。
  • 列可以包含字母、数字 !#&[]< >_:@

ALTER TABLE 操作在 Spark 作业提交中失败

由于权限不足,创建模式、表并尝试 ALTER TABLE 操作的 Spark 作业可能会遇到 authz.AccessControlException 问题。

出现这种情况的原因是,即使模式和表创建成功,作业仍试图在元存储数据更新为新创建的模式和表详细信息之前执行 ALTER TABLE 操作。

解决方法: 要防止出现拒绝访问错误,您必须在涉及在同一 Python 脚本中创建新模式或表的每个操作之间提供时间延迟。

解决方法您可以禁用 DAS 或确保您的存储桶或对象存储配置了 HTTPS 端点。

试图通过 Presto (C++) 读取 Parquet v2 表时,会出现错误

当您尝试通过 Presto (C++) 读取在 watsonx.data 中通过数据管理器创建的 Parquet v2 表时,会出现以下错误:

Error in ZlibDecompressionStream::Next

解决方法: Presto (C++) 目前不支持读取 Parquet v2 表。 您必须将数据复制到 v1 格式的新表中,以便兼容 Presto (C++) 的读取。

  1. 将会话属性设置为 PARQUET_1_0:

    set session <catalog_name>.parquet_writer_version = 'PARQUET_1_0';
    
  2. 运行以下命令将数据复制到新表:

    create table <catalog name>.<schema name>.<table name> as (select * from <originaltablename>;
    

Spark 摄取目前不支持分区表列名的特殊字符,如引号、反勾和括号。

尝试使用 Presto (C++) 引擎查询查询历史记录和监控管理 (QHMM) 相关表时可能会遇到错误

尝试使用 Presto (C++) 引擎查询 QHMM 相关表时,可能会因文件格式不支持而出错。 Presto(C++) 仅支持 Parquetv1格式。 您不能使用 Presto (C++) 查询其他格式的数据或表格。

解决方法: 您可以改用 Presto(Java)引擎来查询 QHMM 相关表。

飞行服务器中出现服务器并发量达到限制的错误

使用飞行服务器运行查询时,可能会遇到“已达到服务器并发限制”错误。 当大量并发请求导致服务器内存使用率过高时,就会出现这种情况。

解决方法: 增加飞行舱的数量或调整结构以简化查询,从而减少子查询的数量。 根据系统负载和可用资源调整副本数量。

使用以下命令扩展 wdp-connect-flight 部署的 pod 数量:

oc scale deployment wdp-connect-flight --replicas=<number of replicas>

例如,如果需要将 pod 的数量扩展到 36 个,请运行以下命令:

oc scale deployment wdp-connect-flight --replicas=36

Presto与Hive镶嵌表中的公历日期识别不正确

Presto 在处理 0200-01-01 之前的历史日期时会出现问题,特别是当这些日期存储在以 Parquet 格式化的 Hive 表中时。 出现这个问题的原因是在 1582-10-15 中实现了公历和儒略历之间的转换。 Presto会误解该截止日期之前的日期。

SHOW COLUMNS 输出中有关列长度的信息不完整

Presto 中的 SHOW COLUMNS 查询目前提供有关列的信息,包括名称、数据类型、附加详细信息(额外)和注释。 这个问题突出表明,现有功能缺乏有关基于字符的数据类型(CHAR 和 VARCHAR)长度的详细信息。 有些连接器会返回创建表格时定义的实际长度,有些连接器则可能提供默认值或不提供任何信息。

为解决这一限制,SHOW COLUMNS 输出中新增了三列:

  • 刻度:适用于 DECIMAL 数据类型,表示小数点后的位数。

  • 精度:适用于数值数据类型,指定总位数。 (默认值:10)

  • 长度:用于 CHAR 和 VARCHAR 数据类型,表示允许的最大字符数。

当前限制:

  • 由于连接器的限制,Length 列中报告的长度可能并不总是反映表模式中定义的实际大小。

  • 不提供长度信息的连接器将显示默认值或空,具体取决于连接器。

查询优化器中 OPT_SORTHEAP 的计算错误

由于查询优化器配置设置中对 OPT_SORTHEAP 值的计算错误,查询优化器的性能可能会受到影响。

解决方法: 要解决查询优化器中 OPT_SORTHEAP 的计算错误,请完成以下步骤,将配置更新为 OPT_SORTHEAP= <initial_value>OPT_SORTHEAP <initial_value>/20

  1. 设置 PROJECT_CPD_INSTANCE 环境变量,指向安装 watsonx.data 的命名空间。
export PROJECT_CPD_INSTANCE=<wxd_namespace
  1. 运行以下命令,将 OPT_SORTHEAP 的值编辑为 OPT_SORTHEAP <initial_value>/20
oc edit db2uinstance lakehouse-oaas -n $PROJECT_CPD_INSTANCE
  1. 等待一段时间,让 STATE 变为 Ready for lakehouse-oaas,然后运行以下命令。
watch "oc get db2uinstance  -n $PROJECT_CPD_INSTANCE"

限制 -Presto(C++)

  • Presto(C++)引擎目前不支持数据库目录。
  • Parquet 是唯一受支持的文件格式。
  • Hive支持连接器。
  • 默认 Iceberg 表仅支持 Parquet v1 格式的读取。
  • 支持TPC-H/TPC-DS查询。
  • DELETE FROMCALL SQL 不支持该语句。
  • STARTCOMMIT,和 ROLLBACK 不支持交易。
  • 数据类型 CHARTIME,和 TIME WITH TIMEZONE 不受支持。 这些数据类型被纳入 VARCHARTIMESTAMP,和 TIMESTAMP WITH TIMEZONE
    • IPADDRESSIPPREFIXUUIDkHYPERLOGLOGP4HYPERLOGLOGQDIGEST,和 TDIGEST 不受支持。
    • VARCHAR 仅支持有限的长度。Varchar(n) 不支持最大长度限制。
    • TIMETIME WITH TIMEZONE 得到社区发展的支持。
    • TIMESTAMP 无法读取 Parquet 文件中的列。
  • 标量函数:
    • IPFunctionsQDigestHyperLogLog 和地理空间国际化均不受支持。
  • 聚合函数:
    • QDigest、分类指标和差分熵不受支持。
  • S3和S3支持兼容的文件系统(读写)。

Presto(C++)无法查询外部分区表

当您使用以下方式查询外部表时 CHAR 数据类型列,查询将运行失败。 出现此问题的原因在于Presto(C++)不支持 CHAR 数据类型。

解决方法:CHAR 数据类型列更改为 VARCHAR 数据类型。

访问同一粘合元存储目录中的 Hive 和 Iceberg 表

使用时AWS Glue 数据目录用于管理包含 Iceberg 和Hive表,尝试从Hive目录给出,Not a Hive table 错误并尝试访问HiveIceberg 目录中的表格显示,Not an Iceberg table 错误。

使用 ID 作为列名CassandraCREATE TABLE

在Cassandra,您无法创建包含名为 ID 在使用Cassandra连接器通过Presto。 这是因为 ID 是Cassandra使用的驱动程序Presto,它会自动为每一行生成一个 UUID。 尝试创建具有列名 ID 的表会导致出现错误消息,指示重复的列声明,如下所示: 重复列 id 表格声明 tm_lakehouse_engine_ks.testtable12

解决方法: 通过 Presto 创建 Cassandra 表时,避免使用 ID 作为列名。

使用 CreateCollection L3 策略的用户角色无法在 Milvus 中创建集合

使用 pymilvus 在 Milvus 中创建集合时,使用 User role 的用户在使用 ORM ConnectionMilvusClient Connection 方法时可能会失败。

解决方法: 您必须按照说明操作:

ORM Connection:用户需要两者DescribeCollection和CreateCollection授予的特权L3政策页面。 您必须在授予时选择数据库中的所有集合 DescribeCollection 特权L3通过 Web 控制台进行策略。

MilvusClient Connection:仅有的 CreateCollection 特权是必要的L3政策页面。 然而,第一次尝试创建集合将会失败。

  1. 跑过 create_collection 运行一次。
  2. 重新运行 create_collection 重新运行。 这样可以使策略同步并且集合创建成功。

特殊字符和大小写混合影响数据同步

在包含名称中含有特殊字符或大小写字母的表或架构的存储桶之间同步数据时,您可能会遇到以下意外行为:

  • 具有某些特殊字符的表或架构 %,{)(@$[: 将在同步期间完全跳过其数据。
  • 包含混合大小写或大写字母的表或模式将在同步之前转换为小写。

变通方法: 避免在表名和模式名中使用特殊字符和混合大小写。 重命名现有表和模式以仅使用受支持的字符。

缺少 Amazon S3 存储端点的数据验证

目前,用户界面 (UI) 不会对与 Amazon S3 存储类型关联的端点执行数据验证。

WITH 子句和 USE catalog.schema 中的别名用法不正确

WITH 子句: 在 WITH 子句中引用数据时,请使用在其定义期间指定的确切别名。 使用不正确的别名会触发以下错误消息。

Schema must be specified when session schema is not set

USE catalog.schema usage with WITH 子句: 使用 WITHUSE catalog.schema 指定表时,具有不正确别名的查询将导致以下错误。

Table does not exist

字符串文字解释Presto(Java )

Presto(Java ) 默认将字符串文字解释为 VARCHAR,而许多其他数据库系统则将它们视为 CHAR。

在Presto(Java ),字符串比较是针对字符串中实际存在的字符(不包括尾随空格)进行的。 这可能会导致查询在使用可能包含尾部空格的字符串时返回不正确的结果,因为在比较期间不会考虑这些空格。

具有多个点的表名

Presto(Java ) 不支持创建或查询名称中包含三个或三个以上连续点的表名。 尝试在查询中引用此类表可能会导致错误。

从 IAM 中除去用户后,该用户仍在引擎的“访问控制”页面中可视。

Teradata 连接器不支持 LDAP 认证。

watsonx.data Teradata 连接器当前不支持 LDAP (轻量级目录访问协议) 进行用户认证。

变通方法: 如果迂到 502 错误,请在等待 1-5 秒后重新装入 Spark 历史记录 UI 页面。 这应该允许服务器有足够的时间运行。

Presto 中的跨目录模式创建异常。

由Presto 管理的Hive和 Iceberg 目录的模式创建存在异常。 在多个目录(例如,一个 Iceberg 目录和一个Hive目录,或两个 Iceberg 或Hive目录)中使用共同的Hive元存储服务时,在一个目录中创建模式可能会在错误的目录中创建模式。 如果模式创建期间指定的位置属于与预期不同的目录,那么会发生此情况。

解决方法在Presto 中使用 CREATE SCHEMA 语句时,必须始终明确提供与目标目录相关联的正确存储路径。 这将确保在期望的位置创建模式。

Presto(Java ) 具有许多列且大小超出默认限制的查询。

Presto(Java )涉及多个表且列数较多(例如,每个表 1000 列或更多)的查询 SELECT 子句可能会在所有部署环境中遇到性能问题。

迭代优化器在 max_reorder_joins 设置为 5 或更高值 (缺省超时为 3 分钟) 时超时,并发生以下错误:

The optimizer exhausted the time limit of 180000 ms

对于超出默认的查询 max-task-update-size 限制 (16MB在Presto(Java )),你可能会观察到 TaskUpdate size exceeding this limit 错误(limit的具体值取决于实际查询)。

变通方法:

  • 您可以通过使用以下会话属性临时禁用 reorder_joins 规则来提高查询性能:

    set session reorder_joins = false;
    
  • 增加 max-task-update-size 价值 config.properties 如果问题涉及 TaskUpdate size exceeding the limit 错误并重新启动Presto(Java )。

示例:

experimental.internal-communication.max-task-update-size=64MB

限制: 未记录的 Informix 数据库中不支持事务。

在 watsonx.data中,尝试对未记录的 Informix 数据库执行具有事务影响的查询时,查询将失败。 这是因为根据设计,未记录的 Informix 数据库不支持事务。

限制: Netezza Performance Server INSERT 语句限制。

Netezza Performance Server 当前不支持使用 VALUES 子句将多行直接插入到表中。 此功能仅限于单行插入。 有关 INSERT 语句的详细信息,请参阅 Netezza Performance Server 文档

不支持对多行使用 VALUES 的以下示例:

INSERT INTO EMPLOYEE VALUES (3,'Roy',45,'IT','CityB'),(2,'Joe',45,'IT','CityC');

变通方法: 将子查询与 SELECT 和 UNION ALL 配合使用,以构造临时结果集并将其插入到目标表中。

INSERT INTO EMPLOYEE SELECT * FROM(SELECT 4,'Steve',35,'FIN','CityC' UNION ALL SELECT 5,'Paul',37,'OP','CityA') As temp;

问题:Milvus 对查询无反应。

在尝试加载超出可用内存容量的集合或分区时,Milvus 可能不会响应查询。 出现这种情况是因为 Milvus 中的所有搜索和查询操作都是在内存中执行的,需要在查询前加载整个集合或分区。

变通方法:

  • 考虑 Milvus 部署的内存限制,避免加载过大的集合或分区。

  • 如果 Milvus 对查询反应迟钝,请使用相应的 Milvus API 从内存中卸载或释放一些集合。 使用 Python SDK 的示例:collection.release()

问题:Milvus 中删除后的行计数不准确。

collection.num_entities 属性可能无法反映删除操作后 Milvus 集合中的实际行数。 此属性提供估算值,并且可能不考虑已删除的实体。

要获取准确的行计数,请对集合执行 count(*) 查询。 这将提供准确的计数,即使在删除后也是如此。

Pymilvus 语法:

collection = pymilvus.Collection(...)
collection.query(expr='', fields=['count(*)'])

限制: 不受支持的 Db2 操作。

watsonx.data 当前不支持对 Db2 按列组织的表执行 ALTER TABLE DROP COLUMN 操作。

缺省情况下,Db2 实例以按列组织的格式创建表。

watsonx.data 不支持在 Db2中创建按行组织的表。

限制: 在 Elasticsearch中处理空值。

Elasticsearch 连接器需要对字段的索引映射进行显式定义,以在装入数据时处理空值。

限制: 使用 Elasticsearch装入嵌套 JSON。

Elasticsearch 连接器要求用户显式指定嵌套 JSON 结构作为 ROW 类型的数组,以便正确装入和查询。 要处理此类结构,请使用 UNNEST 操作。

限制:用户可为 IBM Cloud的 watsonx.data 单个实例创建 3 个 Milvus 服务实例。

问题:无法在Presto 中创建视图。

Presto将映射数据库中的视图描述为 TABLE,而不是 VIEW。 这对于连接到Presto引擎的JDBC程序来说是显而易见的。

问题: 在撤销数据访问时,未从目录访问控制中除去用户。

当您通过使用“访问控制”屏幕将用户添加到数据控制策略来授予用户访问权时,将针对目录成功列出该用户。 在从“访问控制”页面撤销用户访问权时,该用户将保留针对目录列出的用户访问权,并继续具有用户访问权。

问题:无法查看预期目录Presto(Java )。

具有管理员权限的用户无法查看预期Hive和PostgreSQL来自的目录Presto(Java )。

问题: 控制台 UI 列出了无效用户。

watsonx.data用户(user1 ) 邀请新用户 (user2 )使用管理访问和用户屏幕 (管理 > 访问 (IAM) > 管理访问和用户)并授予角色访问权限(MetastoreAccess,查看者、操作员、编辑者、管理员)。 User2 通过 user1的帐户访问 watsonx.data 实例中的资源。 此外,通过使用“访问控制”屏幕添加到数据控制策略,在资源级别授予 user2 数据访问权。 当 user1 从 user1的帐户中除去 user2 时,user2 仍在资源级别的 访问控制 选项卡中列出。

问题: 无法查看已创建的模式。

将具有“用户”角色和“创建”访问权 (该用户仅具有 "创建" 访问权) 的用户添加到外部数据库时,他们无法看到他们创建的模式。 尽管用户可以创建模式,但他们无法查看这些模式。 以下是系统响应:

presto:default> show schemas;
Schema
--------
(0 rows)

变通方法: 为用户创建的模式提供选择特权。

问题: 查询外部数据库时访问被拒绝。

当具有“用户”角色和“创建”访问权 (该用户只有 "创建" 访问权) 的用户添加到外部数据库时,他们无法从他们创建的表运行选择查询。 虽然用户可以连接到Presto(Java ) 引擎并创建表和模式,它们无法从表中查询。 系统将显示 Access Denied 消息。

Query 20230608_132213_00042_wpmk2 failed: Access Denied: Cannot select from columns [id] in table or view tab_appiduser_01

变通方法: 为用户创建的表提供选择特权。

问题: 在不同的目录下创建了模式。

模式在 Iceberg 和 Hive 目录中可用。 在 Iceberg 目录下创建模式时,该模式将列示在 Hive 目录下,反之亦然。

问题:Presto(Java )不支持删除Iceberg表。

问题: Db2中的 DROP SCHEMA。

在 Db2中,仅当模式为空时,才能删除该模式。 针对非空模式启动 DROP SCHEMA 语句可能会导致 Db2 SQL 错误 SQLCODE=-478SQLSTATE=42893

问题: Db2部分支持的 CREATE VIEW 语句。

Db2 连接器部分支持 CREATE VIEW 语句。 这Presto(Java ) 支持的 SQL 语法不包括创建具有自定义列名(不同于表列名)的视图。

问题: 部分受 NPSaaS支持的 CREATE VIEW 语句。

NPSaaS 连接器部分支持 CREATE VIEW 语句。 这Presto(Java ) 支持的 SQL 语法不包括创建具有自定义列名(不同于表列名)的视图。

问题:Presto(Java ) 无法将该路径识别为目录。

当您使用Presto(Java )Hive连接器使用S3来自外部位置的文件夹,Presto(Java ) 无法将该路径识别为目录,并且可能会发生错误。

例如,使用 IBM Cloud UX 和 Aspera S3 控制台在名为 dqmdbcertpq 的存储区中的目标目录 DBCERT/tbint 中创建客户表时,迂到以下错误: External location must be a directory

CREATE TABLE "hive-beta"."dbcert"."tbint" (
RNUM int , CBINT bigint
) WITH (
format='PARQUET', external_location = 's3a://dqmdbcertpq/DBCERT/tbint'
);
Query 20230509_113537_00355_cn58z failed: External location must be a directory

文件系统中的对象存储为对象及其路径。 对象和路径必须具有关联的元数据。 如果路径与元数据不关联,Presto(Java ) 无法识别该对象并响应说该路径不是目录。

问题: 分配“授予”或“撤销”特权。

在以下场景中,通过访问策略向用户分配 授予撤销 特权无法按预期工作:

  1. User_A 添加存储区和 Hive 目录 (例如,useracat02)。

  2. User_A 创建模式和表。

  3. User_B 和 User_C 被分配到目录的 用户 角色。

  4. User_A 向 User_B 添加允许授权策略。

  5. User_B 连接到目录并将 grant select 运行到 User_C。

    presto:default> grant select on useracat02.schema_test_01.tab_1 to "6ff74bf7-b71b-42f2-88d9-a98fdbaed304";
    
  6. 当 User_C 连接到目录并对表运行 select 命令时,该命令将失败并返回访问被拒绝的消息。

    presto:default> select * from useracat02.schema_test_01.tab_1;
    Query 20230612_073938_00132_hthnz failed: Access Denied: Cannot select from columns [name, id, salary, age] in table or view tab_1
    

问题: 正在创建没有位置的模式。

创建没有位置的模式时,不会在任何目录的模式列表中列出该模式。 例如,如果在未指定存储区位置的情况下创建模式,那么将在 HMS 中而不是存储区中创建模式。 当您尝试创建同名的新模式时,它将失败并响应该模式已存在。

变通方法: 在创建模式时指定存储区的位置。

问题: 模式和存储区的唯一名称。

无法创建具有相同名称的模式和存储区。 例如,如果在一个目录中创建名为 "sales" 的模式,那么同一名称不能用于另一个目录中的另一个模式。 同样,如果您使用名称 "salesbucket" 注册一个存储区,那么无法注册另一个具有相同名称的存储区,即使该存储区位于另一个对象库中也是如此。

变通方法: 创建模式和存储区时使用唯一名称。

问题: 正在为目标表创建模式。

如果该模式不存在,那么必须为目标表创建模式。

问题: 如果 CSV 文件包含错误记录,那么采集失败。

如果不匹配字段大于表定义,那么 ibm-lh 工具不支持跳过 CSV 文件的最大错误记录数。

问题: 正在创建具有路径的模式位置。

创建模式时,请使用下列其中一个位置选项:

  • 指向没有尾部 / 的存储区/子路径的位置。
  • 指向具有尾部 / 的存储区/子路径的位置-建议进行更好的构造。

尽管您可以使用指向存储区的位置,但只能使用或不使用尾部 /,这可能会导致失败。 因此,建议使用子路径。

问题:Presto(Java ) 不支持 AS OF 带有冰山桌。

Presto(Java ) 不支持 AS OF <time stamp> SELECT 查询中的命令。

变通方法: 调用 CALL iceberg_data_rollback_to_snapshot 以移至所需的时间戳记。

如果将 CALL iceberg_data_rollback_to_snapshot 与时间戳记配合使用,那么无法调用存储过程以移至后续时间戳记。 使用 Spark SQL 作为替代方法。

问题: 只有创建者对 Apache Hive (API) 中的表具有 DROP 访问权。

只有表的创建者才能删除在 Apache Hive 目录中创建的表。 即使其他用户对该表具有显式 DROP 访问权,也无法删除该表。 它们将获取 Access Denied 消息。

问题: watsonx.data不支持用户提供的证书。

当前,在添加数据库连接,对象存储区或使用 ibm-lh 实用程序时,用户提供的证书在 watsonx.data 中不受支持。

问题: 没有要从文件错误解析的列。

尝试使用 ibm-lh 工具从 AWS S3 采集文件夹时,如果文件夹中没有空文件,那么可能会迂到以下错误:

No columns to parse from file

变通方法: 首先使用 aws s3 ls 命令列出存储区中的文件夹。 如果未列出任何空文件,请使用 aws s3 cp 命令将所有文件复制到另一个文件夹。

目标表名称中的特殊字符可能导致摄入失败。

如果通过 Web 控制台进行采集时目标表名称中包含特殊字符,那么采集将失败。

变通方法: 您可以通过 Spark CLI 使用采集来采集数据。

局限性:Presto(Java ) 不支持 VARBINARY 数据类型。

当前版本Presto(Java ) 不支持具有长度的二进制字符串。 在数据库上执行 ALTER TABLE 语句会导致以下错误:

Unknown type 'varbinary(n)' for column 'testcolumn'

这是 Preso 中的限制,而不是 watsonx.data中的限制。

限制:使用 VS Code 开发环境 - Spark Labs 时,备份数据以防止数据丢失。

由于 Spark 实验室具有短暂性,因此必须定期备份存储的数据,以防止在升级或 Spark 主控崩溃时可能丢失数据。