IBM Cloud Docs
已知问题(限制)

已知问题(限制)

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

Spark 中 MOR 到 COW 表的转换失败 4.0

Spark 4.0 不支持 MOR 到 COW 表的转换。

解决方法: 使用 Spark 版本 3.4 或 3.5 执行 MOR 到 COW 表的转换。

由于缺少存储桶名称,Adhoc 存储摄取失败

这个问题是 Snowflake 特有的。

由于请求有效负载中的 bucket_name 丢失或为空,使用 Adhoc Storage 创建的摄取任务失败。 任务进入运行状态,但最终失败。

解决方法可以注册数据源,而不是使用临时存储。 或者,持久化连接允许继续摄取。

由于蜂巢目录列名不匹配,预览仪表板在 Presto (C++) 引擎中显示空值

Presto (C++) 引擎会导致预览仪表板显示某些表的所有空值,原因是 Parquet 文件中的列名与 Hive 目录配置不匹配。

解决方法应用以下会话属性:

   set session [catalog_name].file_column_names_read_as_lower_case=true;

Manta 应用程序无法在 Spark 上运行 4.0

Manta 应用程序(Iceberg、Hudi、Hive、Delta)在 Spark 4.0 上提交时无法执行。

解决方法: 使用其他可用的 Spark 版本运行 Manta 应用程序。

在启用 FIPS 的群集中,箭头连接器的测试连接失败

由于加密限制,在启用 FIPS 的群集中部署箭头连接器时,测试连接可能会失败。 这会影响到 Greenplum、MariaDB, 和 Salesforce 等连接器,这些连接器在连接验证过程中依赖于与 FIPS 模式不兼容的底层数据源或库。

Apache Kafka 在启用 FIPS 的群集中测试连接失败

对于 Apache Kafka,除非将 SASL_MECHANISM 明确设置为 " SCRAM-SHA-512 ",否则测试连接可能会失败。 该机制符合 FIPS 要求,应在支持 FIPS 的环境中使用,以确保连接测试成功。

通过输入用户界面创建模式和表时不支持特殊字符

通过摄取用户界面创建模式和表时,不支持以下特殊字符: %+ 这些限制是由于 Hive、Delta 和 Hudi 等底层存储引擎的限制而实施的。 虽然数据管理器页面可能允许更多特殊字符(例如 !, @, #, &, _, -, =, +, ], }, <, 和 > ),但摄取流会执行更严格的验证,以确保不同服务之间的兼容性。

更新过期的存储或数据库凭据后,查询执行暂时失败

更新与 Presto 引擎相关的存储或数据库资源的过期凭证后,查询工作区中的查询执行会失败约 30 至 40 秒。 延迟之后,查询会成功执行,不会再出现其他问题。

统计同步作业在执行过程中卡住

统计同步作业在执行过程中可能会因未知条件而卡住。 出现这种情况时,用户可以在优化器或 Db2 中检查日志以查看作业状态。 如果作业状态为 NOTRECEIVEDNOTRUNUNKNOWN,用户必须手动强制删除作业并提交队列中的下一个作业。

  • NOTRECEIVED(未收到 ):系统未收到指定任务 ID 的呼叫。
  • NOTRUN:调度程序调用任务过程时发生错误。
  • 未知:任务开始执行,但由于意外情况,调度程序未能记录结果。

兼容性问题:Spark 无法读取使用 Parquet 的 presto 编写的冰山表 V2

当 Presto 被明确配置为使用 Parquet V2 写入器时,Spark 无法读取 Presto 插入到冰山表中的数据。 出现这个问题是因为 Spark 不支持某些 Parquet V2 编码的矢量化读取,例如 DELTA_BINARY_PACKED。 典型的错误信息是 UnsupportedOperationException: Cannot support vectorized reads for column [CustomerID] optional int32 CustomerID = 1 with encoding DELTA_BINARY_PACKED. Disable vectorized reads to read this table/file at org.apache.iceberg.arrow.vectorized.parquet.VectorizedPageIterator.initDataReader(VectorizedPageIterator.java:98)

解决方法: 如果在读取表(尤其是使用 watsonx.data 早期版本创建的表)时遇到此错误,请设置以下 Spark 配置。

   config("spark.sql.iceberg.vectorization.enabled", "false")

tpcdstpch 连接器查询与角色相关的 information_schema 表的限制

用户在查询 tpcdstpch 连接器的角色相关 information_schema 表时遇到错误。 对于 Presto 中的这些连接器来说,这种行为是有意为之,也是预料之中的,因为 tpcdstpch 是基准连接器,不支持基于角色的安全功能。

解决方法为防止出错,请避免查询 tpcdstpch 连接器的角色相关信息_schema 表(如 applicable_roles、enabled_roles 和 roles)。

使用有效的模式、表和列名称,确保查询的可靠性

在查询工作区创建表格时,避免在模式、表或列名称中使用前导空格或尾部空格。 虽然创建可能会成功,但在查询或交互过程中,这些额外的空格可能会导致问题。 为确保运行平稳可靠,请务必使用干净的名称,不要有多余的空格。

中对 BLOB 和 CLOB 支持的限制 Presto

Presto 可以读取和写入包含有 和 列的表的连接器。BLOB CLOB 不过,它不支持在 CREATE TABLE 语句中使用 BLOBCLOB 作为列数据类型。

延迟执行 Milvus

在 Milvus 中,创建访问控制策略和执行这些策略之间会有延迟。 出现这种延迟是因为策略同步需要时间。

无法跨引擎(Spark 和 Presto )查询 SQL 视图

使用 Hive 冰山目录的引擎创建的 SQL 视图可被其他引擎识别,但无法跨引擎查询,因为一个引擎无法理解另一个引擎的 SQL 方言。

Tiny Presto API 响应中缺少驱动程序和资源组详细信息

在查询 Tiny Presto 引擎时,GET presto_engines API 目前返回的驱动程序和 resource_groups 信息为空,因为新架构在 get_presto_engine 调用中省略了驱动程序详细信息;不过,现有用户仍可通过 /driver_registration 端点访问驱动程序信息。

无法删除名称中包含特殊字符的列中的数据

无法删除名称中包含特殊字符的列中的数据,因为 WHERE 子句中的列名不支持特殊字符。

长时间使用 watsonx.data Assistant 后出现错误

在长时间使用 watsonx.data 助手后,它产生了以下错误。 There is an error with the message you just sent, but feel free to ask me something else.

解决方法: 重新加载浏览器。

删除现有注册后无法重新注册 SAL

非试用用户在删除现有注册后无法重新注册 SAL。

解决方法完成以下步骤:

  1. 在 IAM 访问云账户中为用户添加访问权限。

  2. 使用以下 SAL API 删除集成。

    curl -X 'DELETE' \ 'https://api.dataplatform.cloud.ibm.com/semantic_automation/v1/wxd_integrations/<wxd-instance-id>' \ -H 'accept: */*' \ -H 'Authorization: Bearer <iam_bearer_token>'

  3. 使用以下应用程序接口检查集成状态,确保集成已被删除。

    curl -X 'GET' \ 'https://api.dataplatform.cloud.ibm.com/semantic_automation/v1/wxd_integrations/<wxd-instance-id>' \ -H 'accept: */*' \ -H 'Authorization: Bearer <iam_bearer_token>'

  4. 重新注册 SAL。

在查询工作区创建物化表成功,但在使用相同权限的 Spark 笔记本中创建失败

尝试使用查询工作区中的 SQL 查询创建物化表时,操作成功。 用户对默认 Iceberg 目录的数据桶和适当的访问策略(插入、更新、选择、删除)具有读取权限。 但是,当使用 watsonx.data Spark 模板在 Spark 笔记本中执行相同的 SQL 语句时,会产生以下错误 the action is not allowed

解决方法:Create access control policy 页面中为冰山桶存储定义 L3 策略。

QHMM 桶仅在发动机处于运行状态时才与发动机关联

如果在调配状态下将 QHMM 目录与引擎关联,系统将返回错误信息,说明该目录在可维护性侧不存在。 不过,当发动机处于运行状态时,系统会自动关联 QHMM 目录。

用户可能会遇到“由于凭证无效导致测试连接失败”的错误

对于某些数据源,即使数据源凭据正确,用户也可能会遇到“由于凭据无效导致测试连接失败”的错误。 尽管凭据有效,但仍可能出现此问题,导致无法成功进行数据源连接测试。

解决方法: 如果遇到此故障错误,必须联系 IBM 支持。

冰山表中缺少列 NDV 统计信息会导致查询计划不理想

在当前实施中,对于 Presto ( Java ) 和 Presto (C++) 中的冰山表,列 NDV(不同值个数)统计数据在 MDS 中可用时不使用。 NDV 对于生成最佳查询计划非常重要。 没有它们,性能就会明显下降。

解决方法: 对于非分区表,请使用 SET SESSION <iceberg_catalog>.hive_statistics_merge_strategy='USE_NULLS_FRACTION_AND_NDV';

此解决方法不适用于分区表。

虚拟专用网络配置限制

外部引擎不支持专用端点,如 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

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 网络控制台时,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 主控崩溃时可能丢失数据。