IBM Cloud Docs
手动同步查询优化器与 watsonx.data 元数据存储

手动同步查询优化器与 watsonx.data 元数据存储

关于本任务

为了提供优化的查询,查询优化器提取表定义和 Hive 以及Iceberg统计信息的数据,以便与 IBM® watsonx.data 中的MDS同步。 您可以选择查询优化器必须可用的特定 Hive 和Iceberg表。 建议生成 Hive 和Iceberg统计信息,并为主键和外部键添加标签列,以获得最佳结果。

激活 Query Optimizer 会自动同步连接到 Presto (C++) 引擎的目录的元数据。 但是,如果出现以下情况,您需要执行以下步骤:

  • 部署过程中无法访问或已损坏的目录或模式的元数据丢失。
  • 对表格进行重大更改。
  • 初始同步操作后会引入新表。
  • 在激活后的自动同步过程中,一个间歇性问题导致无法同步表。

准备工作

要从 watsonx.data 同步表格,需要以下项目:

  1. 按照 watsonx.data 中的验证表同步 程序,验证所有预期的表是否都已同步。

  2. 确定您watsonx.data需要查询优化器提供的 Hive和冰山表列表。

  3. Hive识别主键和外部键列。

  4. ANALYZEPresto (C++)中的 Hive 和 Iceberg 表用于生成 Hive 和 Iceberg 统计数据。

  5. 作为一项安全增强功能,只有拥有管理员权限的用户才能运行 ExecuteWxdQueryOptimizer 命令。

过程

  1. 登录到 watsonx.data。

  2. 转到查询工作区

  3. 跑过 ANALYZE 命令来自watsonx.data您想要同步的表的 Web 控制台来生成统计数据(统计数据包括行数、列名、数据大小、行数等)。

    ANALYZE catalog_name.schema_name.table_name ;
    
  4. 运行以下命令进行注册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要同步到的表查询优化器,实现查询优化。 每个目录都需要运行一次。

  5. 运行以下命令来同步目录中每个模式的表:

    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 中的同步操作验证表中的 步骤,在几分钟内验证同步操作。

  6. 识别目录和架构列表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';