使用数据目录查询外部数据
Oracle Cloud Infrastructure Data Catalog 是 Oracle Cloud 的元数据管理服务,可帮助您发现数据并支持数据治理。它提供资产清单、业务词汇表以及数据湖的通用 Metastore。
自治 AI 数据库可以利用此元数据来显著简化管理,进而访问数据湖的对象存储。请使用自动定义和管理的外部表,而不是手动定义外部表来访问数据湖。这些表将在自治 AI 数据库保护的方案中找到,这些方案与数据目录中的更改保持最新。
关于使用数据目录查询
通过与数据目录元数据同步,自治 AI 数据库会自动为数据目录收集的每个逻辑实体创建外部表。这些外部表在完全由元数据同步流程管理的数据库方案中定义。用户可以立即查询数据,而无需手动派生外部数据源的方案(列和数据类型)和手动创建外部表。
同步是动态的,可使自治 AI 数据库在底层数据更改方面保持更新,从而降低管理成本,因为它可以自动维护数百到数千个表。它还允许多个自治 AI 数据库实例共享同一数据目录,从而进一步降低管理成本并提供一组通用的业务定义。
数据目录文件夹/桶是与 Autonomous Database 方案同步的容器。这些文件夹/桶中的逻辑实体映射到 Autonomous Database 外部表。这些方案和外部表通过同步处理自动生成和维护:
-
文件夹/存储桶映射到仅用于组织目的的数据库方案。
-
该组织旨在与数据湖保持一致,并在通过不同路径访问数据时尽可能减少混淆。
-
数据目录是方案中包含的表的真实来源。在数据目录中进行的更改将在后续同步期间更新方案的表。
要使用此功能,数据库数据目录管理员将启动与数据目录实例的连接,选择要同步的数据资产和逻辑实体,并运行同步。同步流程根据所选数据目录收集的数据资产和逻辑实体创建方案和外部表。一旦创建了外部表,数据分析师就可以开始查询其数据,而无需手动为外部数据源推导方案并创建外部表。
注:DBMS_DCAT 程序包可用于执行查询数据目录对象存储数据资产所需的任务。请参见 DBMS_DCAT package 。
与使用数据目录查询相关的概念
要查询数据目录,必须了解以下概念。
数据目录:数据目录会收集指向要使用自治 AI 数据库查询的对象存储数据源的数据资产。在数据目录中,您可以指定在收集期间如何组织数据,从而支持不同的文件组织模式。在数据目录收集过程中,您可以选择要在该资产中管理的存储桶和文件。有关详细信息,请参阅数据目录概述。
对象存储:对象存储具有包含各种对象的存储桶。在这些存储桶中找到的一些常见对象类型包括:CSV、parquet、avro、json 和 ORC 文件。存储桶通常具有所包含对象的结构或设计模式。有许多不同的方式来构建数据,以及许多不同的方式来解释这些模式。
例如,典型的设计模式使用顶层文件夹来表示表。给定文件夹中的文件共享相同的方案并包含该表的数据。子文件夹通常用于表示表分区(例如,每天的子文件夹)。数据目录将每个顶层文件夹称为逻辑实体,并且此逻辑实体映射到自治 AI 数据库外部表。
连接:连接是与数据目录实例的自治 AI 数据库连接。对于每个自治 AI 数据库实例,可以连接到多个数据目录实例。自治 AI 数据库身份证明必须有权访问从对象存储中收集的数据目录资产。
收集:数据目录进程,用于扫描对象存储并从数据集生成逻辑实体。
数据资产:数据目录中的数据资产表示数据源,包括数据库、Oracle 对象存储、Kafka 等。自治 AI 数据库利用 Oracle 对象存储资产进行元数据同步。
数据实体:数据目录中的数据实体是数据(例如数据库表或视图)的集合,或者是单个文件,通常具有许多描述其数据的属性。
逻辑实体:在数据湖中,许多文件通常包含单个逻辑实体。例如,您可能有每日点击流文件,这些文件共享相同的模式和文件类型。
数据目录逻辑实体是一组对象存储文件,通过应用已创建并分配给数据资产的文件名模式在收集期间派生。
数据对象:数据目录中的数据对象是指数据资产和数据实体。
文件名模式:在数据湖中,数据可以采用不同的方式进行组织。通常,文件夹捕获相同方案和类型的文件。必须向数据目录注册数据的组织方式。文件名模式用于标识数据的组织方式。在数据目录中,可以使用正则表达式定义文件名模式。当数据目录收集具有指定文件名模式的数据资产时,将根据文件名模式创建逻辑实体。通过定义这些模式并将其分配给数据资产,可以根据文件名模式将多个文件分组为逻辑实体。
同步(同步):自治 AI 数据库执行与数据目录的同步,以自动更新其数据库对底层数据的更改。可以手动或按计划执行同步。
同步流程根据数据目录数据资产和逻辑实体创建方案和外部表。这些方案受保护,这意味着其元数据由数据目录管理。如果要更改元数据,必须在数据目录中进行更改。自治 AI 数据库方案将反映下次同步后的任何更改。有关更多详细信息,请参见同步映射。
同步映射
同步流程基于数据目录数据资产、文件夹、逻辑实体、属性和相关定制覆盖创建和更新自治 AI 数据库方案和外部表。
| 数据目录 | 自治 AI 数据库 | 映射描述 |
|---|---|---|
| 数据资产和文件夹(对象存储桶) | 方案名 | 默认值: 默认情况下,自治 AI 数据库中生成的方案名称的格式如下:
自定义: 通过定义定制属性、业务名称和显示名称来覆盖这些默认名称,可以定制默认的data-asset-name 和 folder-name。
示例:
|
| 逻辑主体 | 外部表格 | 逻辑实体映射到外部表。如果逻辑实体具有分区属性,则会将其映射到分区的外部表。 外部表名派生自对应逻辑实体的“显示名称”或“业务名称”。 如果设置了 例如,如果将实体的 |
| 逻辑实体的属性 | 外部表格列 | 列名:外部表列名是从对应逻辑实体的属性显示名称或业务名称派生的。 对于从 Parquet、Avro 和 ORC 文件派生的逻辑实体,列名始终是属性的显示名称,因为它表示从源文件派生的字段名称。 对于与从 CSV 文件派生的逻辑实体对应的属性,以下属性字段按优先级顺序用于生成列名:
列类型: 对于从具有 列长度: 列精度: 对于从具有 列标度: |
具有数据目录的典型工作流
存在一个典型的工作流,其中包含要使用数据目录进行查询的用户执行的操作。
数据库数据目录管理员在自治 AI 数据库实例和数据目录实例之间创建连接,然后配置并运行数据目录和自治 AI 数据库之间的同步(同步)。同步基于同步的数据目录内容在自治 AI 数据库实例中创建外部表和方案。
“数据库数据目录查询管理”或“数据库管理员”授予对生成的外部表的 READ 访问权限,以便数据分析师和其他数据库用户可以浏览和查询外部表。
下表详细介绍了每个操作。有关此表中包含的不同用户类型的说明,请参阅数据目录用户和角色。
注:DBMS_DCAT 程序包可用于执行查询数据目录对象存储数据资产所需的任务。请参见 DBMS_DCAT Package 。
| 操作 | 用户是谁 | 说明 |
|---|---|---|
| 创建策略 | 数据库数据目录管理员 | 自治 AI 数据库用户身份证明必须具有适当的权限才能管理数据目录和从对象存储读取数据。 有关更多信息:必需的身份证明和 IAM 策略。 |
| 创建身份证明 | 数据库数据目录管理员 | 确保数据库身份证明已到位,以便访问数据目录和查询对象存储。用户调用 有关更多信息: DBMS_CLOUD CREATE_CREDENTIAL Procedure 。 |
| 创建与数据目录的连接 | 数据库数据目录管理员 | 要启动自治 AI 数据库实例与数据目录实例之间的连接,用户需要调用 与数据目录实例的连接必须使用具有足够 Oracle Cloud Infrastructure (OCI) 权限的用户身份证明。 建立连接后,将使用 有关更多信息: SET_DATA_CATALOG_CONN Procedure 、 UNSET_DATA_CATALOG_CONN Procedure 。 |
| 创建选择性同步 | 数据库数据目录管理员 | 通过选择要同步的数据目录对象来创建同步作业。用户可以:
有关更多信息:请参见 CREATE_SYNC_JOB Procedure 、 DROP_SYNC_JOB Procedure 和 Synchronization Mapping |
| 与数据目录同步 | 数据库数据目录管理员 | 用户启动同步操作。同步通过 同步操作会根据数据目录内容和同步选择创建、修改和删除外部表和方案。使用数据目录定制属性应用手动配置。 有关更多信息:请参见 DBMS_DCAT RUN_SYNC Procedure 、 CREATE_SYNC_JOB Procedure 、 Synchronization Mapping |
| 监视同步和查看日志 | 数据库数据目录管理员 | 用户可以通过查询 USER_LOAD_OPERATIONS 视图来查看同步状态。同步流程完成后,用户可以查看同步结果的日志,包括有关逻辑实体到外部表的映射的详细信息。 |
| 授予权限 | 数据库数据目录查询管理员,数据库管理员 | 数据库数据目录查询管理员或数据库管理员必须向数据分析师用户授予对生成的外部表的 READ 权限。这允许数据分析师查询生成的外部表。 |
| 浏览和查询外部表 | 数据分析师 | 数据分析师能够通过任何支持 Oracle SQL 的工具或应用程序查询外部表。 数据分析师可以检查 DCAT$\* 方案中的同步方案和表,并使用 Oracle SQL 查询表。 有关详细信息:同步映射 |
| 终止与数据目录的连接 | 数据库数据目录管理员 | 要删除现有的数据目录关联,用户将调用 仅当不再计划使用数据目录和从目录派生的外部表时,才会执行此操作。此操作会删除数据目录元数据,并将同步的外部表从自治 AI 数据库实例中删除。数据目录和 OCI 策略上的定制属性不受影响。 |
示例:MovieStream 方案
在此方案中,Moviestream 正在捕获对象存储上的着陆区域中的数据。然后,这些数据中的大部分(但不一定全部)被用于喂养自治 AI 数据库。在向自治 AI 数据库提供数据之前,数据将被转换、清理并随后存储在“黄金”区域中。
数据目录用于收集这些源,然后为数据提供业务上下文。数据目录元数据与自治 AI 数据库共享,自治 AI 数据库用户可以使用 Oracle SQL 查询这些数据源。此数据可以加载到自治 AI 数据库中,也可以使用外部表动态查询。
有关使用数据目录的更多信息,请参阅数据目录文档。
-
对象存储—查看存储桶、文件夹和文件
-
查看对象存储中的存储桶。
例如,以下是对象存储中的着陆 (
moviestream_landing) 和黄金区域 (moviestream_gold) 存储桶: -
查看对象存储存储桶中的文件夹和文件。
例如,以下是对象存储的着陆存储桶 (
moviestream_landing) 中的文件夹:
-
-
数据目录 - 创建文件名模式
-
通知数据目录如何使用文件名模式组织数据。这些是用于对文件进行分类的正则表达式。数据目录收集器使用文件名模式来派生逻辑实体。以下两个文件名模式用于在 MovieStream 示例中收集存储桶。有关创建文件名模式的更多详细信息,请参见 Harvesting Object Storage Files as Logical Data Entities 。
Hive 样式 文件夹样式 {bucketName:.*}/{logicalEntity:[^/]+}.db/{logicalEntity:[^/]+}/.*{bucketName:[\w]+}/{logicalEntity:[^/]+}(?<!.db)/.*$- 为包含 ".db" 作为对象名称第一部分的源创建逻辑实体。
- 为了确保存储桶内的唯一性,生成的名称为 (db-name).(文件夹名称)
- 根据根目录中的文件夹名称创建逻辑实体
- 为了防止与 Hive 重复,将跳过其中包含 ".db" 的对象名称。
-
要创建文件名模式,请转至数据目录的文件名模式选项卡,然后单击创建文件名模式。例如,以下是
moviestream数据目录的创建文件名模式选项卡:
-
-
数据目录 - 创建数据资产
-
创建用于从对象存储中收集数据的数据资产。
例如,在
moviestream数据目录中创建名为phoenixObjStore的数据资产: -
添加与您的数据资产的连接。
在此示例中,数据资产连接到
moviestream对象存储资源的区间。 -
现在,将文件名模式与数据资产关联。选择分配文件名模式,检查所需的模式,然后单击分配。
例如,下面是分配给
phoenixObjStore数据资产的模式:
-
数据目录 - 从对象存储中收集数据
a. 收集数据目录数据资产。选择包含源数据的对象存储存储桶。
在此示例中,选择对象存储中的
moviestream_gold和 ` moviestream_landing` 存储桶进行收集。b. 运行作业后,您将看到逻辑实体。使用浏览数据资产可查看这些资产。
在本示例中,您将查看
customer-extension逻辑实体及其属性。如果您有词汇表,则数据目录会建议与实体及其属性关联的类别和术语。这为项提供了业务上下文。方案、表和列通常不言自明。
在我们的示例中,我们希望区分不同类型的存储桶及其内容的含义:
-
什么是登陆区?
-
数据有多准确?
-
上次更新是什么时候?
-
逻辑实体或其属性的定义是什么
-
-
自治 AI 数据库 - 连接到数据目录
将自治 AI 数据库连接到数据目录。您需要确保用于建立该连接的身份证明使用授权访问数据目录资产的 OCI 主体。有关详细信息,请参阅数据目录策略。
a. 连接到数据目录
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'OCI_NATIVE_CRED', user_ocid => 'ocid1.user.oc1..aaaaaaaatfn77fe3fxux3o5lego7glqjejrzjsqsrs64f4jsjrhbsk5qzndq', tenancy_ocid => 'ocid1.tenancy.oc1..aaaaaaaapwkfqz3upqklvmelbm3j77nn3y7uqmlsod75rea5zmtmbl574ve6a', private_key => 'MIIEogIBAAKCAQEA...t9SH7Zx7a5iV7QZJS5WeFLMUEv+YbYAjnXK+dOnPQtkhOblQwCEY3Hsblj7Xz7o=', fingerprint => '4f:0c:d6:b7:f2:43:3c:08:df:62:e3:b2:27:2e:3c:7a'); END; -- Variables are used to simplify usage later define oci_credential = 'OCI_NATIVE_CRED' define dcat_ocid = 'ocid1.datacatalog.oc1.iad.aaaaaaaardp66bg....twiq' define dcat_region='us-ashburn-1' define uri_root = 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/mytenancy/b/landing/o' define uri_private = 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/mytenancy/b/private_data/o' -- Query a private bucket to test the privileges. select * from dbms_cloud.list_objects('&oci_credential', '&uri_private/'); -------- -- Set the credentials to use for object store and data catalog -- Connect to Data Catalog -- Review connection --------- -- Set credentials exec dbms_dcat.set_data_catalog_credential(credential_name => '&oci_credential'); exec dbms_dcat.set_object_store_credential(credential_name => '&oci_credential'); -- Connect to Data Catalog begin dbms_dcat.set_data_catalog_conn ( region => '&dcat_region', catalog_id => '&dcat_ocid'); end; / -- Review the connection select * from all_dcat_connections;b. 将数据目录与自治 AI 数据库同步。在这里,我们将同步所有对象存储资产:
-- Sync Data Catalog with Autonomous Database ---- Let's sync all of the assets. begin dbms_dcat.run_sync('{"asset_list":["*"]}'); end; / -- View log select type, start_time, status, logfile_table from user_load_operations; -- Logfile_Table will have the name of the table containing the full log. select * from dbms_dcat$1_log; -- View the new external tables select * from dcat_entities; select * from dcat_attributes;c. 自治 AI 数据库—现在开始对对象存储运行查询。
-- Query the Data ! select *from dcat$phoenixobjstore_moviestream_gold.genre; -
更改对象的方案
默认方案名称相当复杂。让我们通过在数据目录中指定资产和文件夹的
Oracle-Db-Schema自定义属性来简化它们。将数据资产分别更改为PHX和文件夹更改为landing和gold。方案是两者的串联。a. 从数据目录中,导航到
moviestream_landing存储桶,并分别将资产更改为landing和gold。更改前:
更改后:
b. 运行另一个同步。
-
示例:分区的数据方案
此方案说明如何在自治 AI 数据库中创建基于从对象存储中的分区数据收集的数据目录逻辑实体的外部表。
以下示例基于示例:MovieStream Scenario,并已进行了调整,以演示与分区数据的集成。数据目录用于收集这些源,然后为数据提供业务上下文。有关此示例的更多详细信息,请参阅示例:MovieStream 方案。
有关使用数据目录的更多信息,请参阅数据目录文档。
-
对象存储—查看存储桶、文件夹和文件
-
查看对象存储中的存储桶。
例如,以下是对象存储中的着陆 (
moviestream_landing) 和黄金区域 (moviestream_gold) 存储桶: -
查看对象存储存储桶中的文件夹和文件。
例如,以下是对象存储的着陆存储桶 (
moviestream_landing) 中的文件夹:
-
-
数据目录 - 创建文件名模式
-
通知数据目录如何使用文件名模式组织数据。这些是用于对文件进行分类的文件夹前缀或正则表达式。数据目录收集器使用文件名模式来派生逻辑实体。指定文件夹前缀时,数据目录会自动根据对象存储中的指定文件夹前缀生成逻辑实体。以下文件名模式用于在 MovieStream 示例中收集存储桶。有关创建文件名模式的更多详细信息,请参见 Harvesting Object Storage Files as Logical Data Entities 。
文件夹前缀 说明 workshop.db/为对象存储中包含 "workshop.db" 路径的源创建逻辑实体。 -
要创建文件名模式,请转至数据目录的文件名模式选项卡,然后单击创建文件名模式。例如,以下是
moviestream数据目录的创建文件名模式选项卡:
-
-
数据目录 - 创建数据资产
-
创建用于从对象存储中收集数据的数据资产。
例如,在
moviestream数据目录中创建名为amsterdamObjStore的数据资产: -
添加与您的数据资产的连接。
在此示例中,数据资产连接到
moviestream对象存储资源的区间。 -
现在,将文件名模式与数据资产关联。选择分配文件名模式,检查所需的模式,然后单击分配。
例如,下面是分配给
amsterdamObjStore数据资产的模式:
-
-
数据目录 - 从对象存储中收集数据
-
收集数据目录数据资产。选择包含源数据的对象存储存储桶。
在此示例中,选择对象存储中的
moviestream_gold和 ` moviestream_landing` 存储桶进行收集。 -
运行作业后,您将看到逻辑实体。使用浏览数据资产可查看这些资产。
在本示例中,您将查看
sales_sample_parquet逻辑实体及其属性。请注意,数据目录已将month属性标识为已分区。
-
-
自治 AI 数据库 - 连接到数据目录
将自治 AI 数据库连接到数据目录。您需要确保用于建立该连接的身份证明使用授权访问数据目录资产的 OCI 主体。有关详细信息,请参阅数据目录策略。
-
连接到数据目录
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'OCI_NATIVE_CRED', user_ocid => 'ocid1.user.oc1..aaaaaaaatfn77fe3fxux3o5lego7glqjejrzjsqsrs64f4jsjrhbsk5qzndq', tenancy_ocid => 'ocid1.tenancy.oc1..aaaaaaaapwkfqz3upqklvmelbm3j77nn3y7uqmlsod75rea5zmtmbl574ve6a', private_key => 'MIIEogIBAAKCAQEA...t9SH7Zx7a5iV7QZJS5WeFLMUEv+YbYAjnXK+dOnPQtkhOblQwCEY3Hsblj7Xz7o=', fingerprint => '4f:0c:d6:b7:f2:43:3c:08:df:62:e3:b2:27:2e:3c:7a'); END; -- Variables are used to simplify usage later define oci_credential = 'OCI_NATIVE_CRED' define dcat_ocid = 'ocid1.datacatalog.oc1.eu-amsterdam-1....leguurn3dmqa' define dcat_region='eu-amsterdam-1' define uri_root = 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/mytenancy/b/landing/o' define uri_private = 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/mytenancy/b/private_data/o' -- Query a private bucket to test the privileges. select * from dbms_cloud.list_objects('&oci_credential', '&uri_private/'); -------- -- Set the credentials to use for object store and data catalog -- Connect to Data Catalog -- Review connection --------- -- Set credentials exec dbms_dcat.set_data_catalog_credential(credential_name => '&oci_credential'); exec dbms_dcat.set_object_store_credential(credential_name => '&oci_credential'); -- Connect to Data Catalog begin dbms_dcat.set_data_catalog_conn ( region => '&dcat_region', catalog_id => '&dcat_ocid'); end; / -- Review the connection select * from all_dcat_connections; -
将数据目录与自治 AI 数据库同步。在这里,我们将同步所有对象存储资产:
-- Sync Data Catalog with Autonomous Database ---- Let's sync all of the assets. begin dbms_dcat.run_sync('{"asset_list":["*"]}'); end; / -- View log select type, start_time, status, logfile_table from user_load_operations; -- Logfile_Table will have the name of the table containing the full log. select * from dbms_dcat$1_log; -- View the new external tables select * from dcat_entities; select * from dcat_attributes; -
自治 AI 数据库—现在开始对对象存储运行查询。
-- Query the Data ! select count(*) from DCAT$AMSTERDAMOBJSTORE_MOVIESTREAM_LANDING.SALES_SAMPLE_PARQUET; -- Examine the generated partitioned table select dbms_metadata.get_ddl('TABLE','SALES_SAMPLE_PARQUET','DCAT$AMSTERDAMOBJSTORE_MOVIESTREAM_LANDING') from dual; CREATE TABLE "DCAT$AMSTERDAMOBJSTORE_MOVIESTREAM_LANDING"."SALES_SAMPLE_PARQUET" ( "MONTH" VARCHAR2(4000) COLLATE "USING_NLS_COMP", "DAY_ID" TIMESTAMP (6), "GENRE_ID" NUMBER(20,0), "MOVIE_ID" NUMBER(20,0), "CUST_ID" NUMBER(20,0), ... ) DEFAULT COLLATION "USING_NLS_COMP" ORGANIZATION EXTERNAL ( TYPE ORACLE_BIGDATA ACCESS PARAMETERS ( com.oracle.bigdata.fileformat=parquet com.oracle.bigdata.filename.columns=["MONTH"] com.oracle.bigdata.file_uri_list="https://swiftobjectstorage.eu-amsterdam-1.oraclecloud.com/v1/tenancy/moviestream_landing/workshop.db/sales_sample_parquet/*" ... ) ) REJECT LIMIT 0 PARTITION BY LIST ("MONTH") (PARTITION "P1" VALUES (('2019-01')) LOCATION ( 'https://swiftobjectstorage.eu-amsterdam-1.oraclecloud.com/v1/tenancy/moviestream_landing/workshop.db/sales_sample_parquet/month=2019-01/*'), PARTITION "P2" VALUES (('2019-02')) LOCATION ( 'https://swiftobjectstorage.eu-amsterdam-1.oraclecloud.com/v1/tenancy/moviestream_landing/workshop.db/sales_sample_parquet/month=2019-02/*'), ...PARTITION "P24" VALUES (('2020-12')) LOCATION ( 'https://swiftobjectstorage.eu-amsterdam-1.oraclecloud.com/v1/tenancy/moviestream_landing/workshop.db/sales_sample_parquet/month=2020-12/*')) PARALLEL
-
-
更改对象的方案
默认方案名称相当复杂。让我们通过在数据目录中指定资产和文件夹的
Oracle-Db-Schema自定义属性来简化它们。将数据资产分别更改为PHX和文件夹更改为landing和gold。方案是两者的串联。-
从数据目录中,导航到
moviestream_landing存储桶,并分别将资产更改为landing和gold。更改前:
更改后:
-
运行另一个同步。
-