通过元数据发现导入至湖仓版

企业的业务服务所产生的一些标准化表单、日志等数据文件,会被周期性地上传到OSS。但是这些存储在OSS的数据文件缺少元数据管理,导致数据难以分析和计算。云原生数据仓库 AnalyticDB MySQL 版元数据发现任务具备自动映射OSS路径、自动对OSS文件分组、自动探索OSS文件字段、自动感知字段变化的能力,能够自动创建和更新数据湖元数据。您可以通过创建OSS元数据发现任务,自动发现同地域下OSS的Bucket和数据文件,将OSS中的数据导入至云原生数据仓库 AnalyticDB MySQL 版

前提条件

  • AnalyticDB for MySQL集群的产品系列为企业版、基础版或湖仓版

  • AnalyticDB for MySQL集群与OSS存储空间位于相同地域。

  • 已上传文件到OSS的Bucket中,且OSS路径格式满足如下条件:

    • OSS路径需为<BucketName>/目录/.../目录/表/文件或者<BucketName>/目录/.../目录/表/分区/.../分区/文件的格式。

    • Bucket层级下至少有一层目录。

    • OSS路径的同一表或分区中的文件类型必须一致。

    • OSS路径的同一表或分区中文件的字段类型和字段数量必须一致。

使用限制

同一个OSS路径,在一个集群中只能创建一个元数据任务。

操作步骤

  1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,在企业版、基础版或湖仓版页签下,单击目标集群ID。

  2. 在左侧导航栏,单击数据接入 > 元数据发现

  3. 元数据发现页面的OSS数据源区域,单击进入向导

  4. OSS数据源页签,根据页面提示进行参数配置,配置说明如下:

    配置项

    参数

    说明

    数据源配置

    数仓模式

    为“基于OSS而构建的标准数据仓库”的场景构建自动化元数据发现,识别精度高。

    说明

    自由模式暂不支持。

    OSS目录位置

    文件所在OSS中的存储路径,以/结尾。

    选择不同的OSS目录位置会得到不同的映射结果,详情请参见OSS路径映射到AnalyticDB for MySQL的示例

    重要

    选择OSS目录位置时,请确保OSS目录位置后至少有一层目录,不能选择到文件的上一层目录。

    路径过滤规则(可选)

    填写需要映射到AnalyticDB for MySQL文件的存储路径。

    • 包含:填写的存储路径中所有文件都会映射到AnalyticDB for MySQL

      重要

      当所选存储路径中有多个文件时,文件类型需要相同,且文件中列的类型和列的数量一致,才能进行映射。

    • 排除:填写的存储路径中所有文件不会映射到AnalyticDB for MySQL

    格式解析器

    格式解析器会读取数据文件内容,从而确定文件的数据格式。默认为自动解析,即按照顺序调用所有内置解析器。

    您可以根据OSS路径中文件的格式,选择与文件格式相同的格式解析器。

    重要

    选择的格式解析器类型和文件格式不一致时,会映射失败。

    配置选项(可选)

    高级自定义设置项。当格式解析器选择CSV时,您可以设置如下参数:

    • 字段分隔符:指定CSV数据文件的列分隔符。

    • 引用标识:指定解析后AnalyticDB for MySQL表的引用标识符。

    • 表头模式:识别CSV的表头,从而确定表的列名称。

    • 允许单个列字段:是否允许CSV数据文件的一行记录只有一列。

      • false:不允许。

      • true:允许。

    • 其他配置:通过参数配置指定是否使用CSV文件第一行作为列名。若有需求请联系技术支持。

    调度配置

    调度频率

    如果想要定期获取数据文件中列或数据的变更,可以通过设置调度频率,定期执行元数据发现任务。

    OSS文件数据变更,重新映射到AnalyticDB for MySQL的表数据会根据目标元数据配置规则更新。

    目标元数据配置

    Schema名称

    设置Schema名称,映射到AnalyticDB for MySQL的数据库名称(默认每个发现任务会创建一个新的Schema)。

    数据库名称填写,需要注意如下两点:

    • 不能是AnalyticDB for MySQL中已有的库名。

    • 不能与其他元数据任务的库名相同。

    配置选项(可选)

    OSS文件字段变更或OSS文件删除时,如何更新映射到AnalyticDB for MySQL的表。

    • 文件字段变更规则

      • 只增加列:OSS文件增加列时,再次执行元数据发现任务,映射到AnalyticDB for MySQL的表也会增加列。

      • 忽略表更新:OSS文件的列或分区变更时,再次执行元数据发现任务,映射到AnalyticDB for MySQL的表仅同步分区,不会增加或删除列。

    • 对象删除变更规则:仅支持忽略删除更新,即OSS文件删除时,再次执行元数据发现任务,映射到AnalyticDB for MySQL的表仍然存在。

    重要

    您可以对映射到AnalyticDB for MySQL的表进行DDL和DML操作。

    • 如果您在AnalyticDB for MySQL表中新增了列,再次执行元数据发现任务,该列不会被覆盖,仍然存在。

    • 若删除了映射到AnalyticDB for MySQL表的某列,再次执行元数据发现任务,被删除的列会被再次映射到AnalyticDB for MySQL

  5. 完成上述参数配置后,单击创建,开始创建元数据发现任务。

    说明

    元数据发现任务创建完成后,自动在您设定的时间周期运行发现任务。如果您想立即同步数据,可以在任务列表的操作栏中单击执行

  6. 任务开始运行后,可以在任务列表界面管理任务的运行情况,支持查看任务的运行状态、配置的修改等。

    说明

    任务运行成功后,可以在作业开发 > SQL开发页面,查看映射到AnalyticDB for MySQL的库、表、分区等。

OSS路径映射到AnalyticDB for MySQL的示例

OSS路径映射到AnalyticDB for MySQL的结果,与以下两个因素有关。

  • OSS文件及其所在路径。

  • 元数据发现任务中选择的OSS目录位置

系统会根据您选择的OSS目录位置自动将OSS目录位置后的第一层目录名映射为表名,OSS目录位置后的第二层至最后一层目录名映射为分区,示例如下。

OSS路径

OSS目录位置

映射到AnalyticDB for MySQL的表

oss://adb/Table1/file1.csv

oss://adb/Table1/file2.json

oss://adb/

不能映射表。

原因:Table1目录下的文件类型为CSV和JSON,文件类型不一致,故而不能映射表。

重要

如果文件类型相同,但文件中字段的数据类型不一致,也不能进行映射。

oss://adb/Table2/year/month/day/file3.json

oss://adb/Table2/year/month/day/file4.json

oss://adb/

映射到AnalyticDB for MySQL的表为分区表,表名为Table2,分区字段为partition_0partition_1partition_2

说明

由于没有分区键,这里使用partition_num来补充。

oss://adb/Table2/

映射到AnalyticDB for MySQL的表为分区表,表名为year,分区字段为partition_0partition_1

oss://adb/Table2/year/month/

映射到AnalyticDB for MySQL的表为非分区表,表名为day

oss://adb/Table2/year/month/day/

不能映射表。

原因:选择的OSS目录位置后无其他层目录。

oss://adb/Table3/year=2022/month=03/day=01/file5.csv

oss://adb/Table3/year=2022/month=03/day=01/file6.csv

oss://adb/

映射到AnalyticDB for MySQL的表为分区表,表名为Table3,分区字段为yearmonthday

  • oss://adb/Table3/

  • oss://adb/Table3/year=2022/

不能映射表。

原因:year=2022或month=03不符合AnalyticDB for MySQL表的命名规则。表命名规则的详细信息,请参见使用限制

oss://adb/Table4/2020/03/30/file7.csv

oss://adb/Table3/2020/03/30/file8.csv

oss://adb/

映射到AnalyticDB for MySQL的表为分区表,表名为Table4,分区字段为partition_0partition_1partition_2

说明

由于没有分区键,这里使用partition_num来补充。

  • oss://adb/Table3/

  • oss://adb/Table3/2020/

不能映射表。

原因:2020或03不符合AnalyticDB for MySQL表的命名规则。表命名规则的详细信息,请参见使用限制