手动同步查询优化器与 watsonx.data 元数据存储
关于本任务
为了提供优化的查询,查询优化器提取表定义和 Hive 以及Iceberg统计信息的数据,以便与 IBM® watsonx.data 中的MDS同步。 您可以选择查询优化器必须可用的特定 Hive 和Iceberg表。 建议生成 Hive 和Iceberg统计信息,并为主键和外部键添加标签列,以获得最佳结果。
激活 Query Optimizer 会自动同步连接到 Presto (C++) 引擎的目录的元数据。 但是,如果出现以下情况,您需要执行以下步骤:
- 部署过程中无法访问或已损坏的目录或模式的元数据丢失。
- 对表格进行重大更改。
- 初始同步操作后会引入新表。
- 在激活后的自动同步过程中,一个间歇性问题导致无法同步表。
准备工作
要从 watsonx.data 同步表格,需要以下项目:
-
请 按照 watsonx.data 中的验证表同步 程序,验证所有预期的表是否都已同步。
-
确定您watsonx.data需要查询优化器提供的 Hive和冰山表列表。
-
Hive识别主键和外部键列。
-
ANALYZE
Presto (C++)中的 Hive 和 Iceberg 表用于生成 Hive 和 Iceberg 统计数据。 -
作为一项安全增强功能,只有拥有管理员权限的用户才能运行
ExecuteWxdQueryOptimizer
命令。
过程
-
登录到 watsonx.data。
-
转到查询工作区。
-
跑过
ANALYZE
命令来自watsonx.data您想要同步的表的 Web 控制台来生成统计数据(统计数据包括行数、列名、数据大小、行数等)。ANALYZE catalog_name.schema_name.table_name ;
-
运行以下命令进行注册watsonx.data目录查询优化器:
ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.REGISTER_EXT_METASTORE('<CATALOG_NAME>','type=watsonx-data,uri=thrift://<Metastore_Thrift_endpoint>,use.SSL=true,auth.mode=PLAIN,auth.plain.credentials=<Username>:<apikey>', ?, ?)';
<CATALOG_NAME>
- 如基础设施管理页面所示(区分大小写)。<Metastore_Thrift_endpoint>
- 从基础设施管理器页面获取(点击目录)。- MDS 证书(
<Username>
:<apikey>
)——必须在 watsonx.data 上创建。 请参阅 连接到 IBM Cloud 或 Amazon Web Services 上的 watsonx.data。
使用查询优化器允许watsonx.data要同步到的表查询优化器,实现查询优化。 每个目录都需要运行一次。
-
运行以下命令来同步目录中每个模式的表:
ExecuteWxdQueryOptimizer 'CALL SYSHADOOP.EXT_METASTORE_SYNC('<CATALOG_NAME>', '<SCHEMA_NAME>', '.*', '<SYNC MODE>', 'CONTINUE', 'OAAS')';
<CATALOG_NAME>
:需要同步的表所属的目录的名称。<SCHEMA_NAME>
:需要同步的表所属架构的名称。<SYNC MODE>
:SKIP
是一种同步模式,表示应该跳过已经定义的对象。REPLACE
是另一种同步模式,用于更新自上次同步以来已被修改的对象。CONTINUE
:记录了错误,但如果要导入多个表,处理将继续。
同步完成后,输出将显示同步表的列表。 同步表的总数必须是目录或模式中表数量的两倍。 这是因为每个表都要同步两次。 一次是从外部元存储到本地元存储,然后从本地元存储到 Db2 目录。
此同步命令可能会遇到超时问题。 然而,同步过程通常会在短时间内成功完成。 请 按照 watsonx.data 中的同步操作验证表中的 步骤,在几分钟内验证同步操作。
-
识别目录和架构列表watsonx.data你需要查询优化器。
提供一个 SQL 文件来定义查询优化器使用。 在 SQL 文件中,标识数据集中每个表的主键、外键和非空列(如果适用)。
例如,如果您有以下三个包含给定列的表,
雇员 (EmployeeID,FirstName,LastName,部门、薪资)、部门(DepartmentID和DepartmentName),和EmployeeDepartmentMapping(MappingID,EmployeeID,和DepartmentI)。
跑过
ALTER
table 命令定义约束:-- NOT NULL ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.Employees ALTER COLUMN FirstName SET NOT NULL ALTER COLUMN LasttName SET NOT NULL ALTER COLUMN Salary SET NOT NULL ALTER COLUMN EmployeeID SET NOT NULL'; ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.Departments ALTER COLUMN DepartmentName SET NOT NULL ALTER COLUMN DepartmentID SET NOT NULL '; ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.EmployeeDepartmentMapping ALTER COLUMN MappingID SET NOT NULL '; -- PRIMARY KEY ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.Employees ADD PRIMARY KEY (EmployeeID) NOT ENFORCED'; ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.Departments ADD PRIMARY KEY (DepartmentID) NOT ENFORCED'; ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.EmployeeDepartmentMapping ADD PRIMARY KEY (MappingID) NOT ENFORCED'; -- FOREIGN KEY ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.EmployeeDepartmentMapping ADD FOREIGN KEY (EmployeeID) REFERENCES "catalog_name".schema_name.Employees(EmployeeID) NOT ENFORCED'; ExecuteWxdQueryOptimizer 'ALTER TABLE "catalog_name".schema_name.EmployeeDepartmentMapping ADD FOREIGN KEY (DepartmentID) REFERENCES "catalog_name".schema_name.Departments(DepartmentID) NOT ENFORCED';