第 4 步:将表对象添加到受管理的表 - Amazon Lake Formation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

第 4 步:将表对象添加到受管理的表

要将 Amazon S3 对象添加到受管理的表中,您需要调用UpdateTableObjecctsAPI。你可以使用Amazon Command Line Interface(Amazon CLI) 和 SDK,还有Amazon GlueETL 库(API 在库中隐式调用)。在本教程中,我们使用Amazon CLI以解释 API 级别的行为。安装Amazon CLI,请参阅安装或更新最新版本的Amazon Command Line Interface.

为了简化示例,我们只添加一个带有一个文件的分区。在实际使用中,您可能需要在所有分区中添加所有需要的文件。

  1. 使用运行以下命令DatalakeAdmin1用户的凭据。

  2. 首先,使用StartTransactionAPI。

    $ aws lakeformation start-transaction { "TransactionId": "396880372a0045dc9c8faff2d19dfeea" }
  3. 现在,您可以在事务中向此表中添加文件。要添加文件,请选择名为product_category=Camera来自 的amazon-reviews-pds表,然后在此分区下选择一个文件。你需要知道UriETag, 和Size你添加的文件。要查找此信息,请输入以下文档Amazon CLI命令(替换你的数据湖存储桶名称使用有效的存储桶名称):

    $ aws s3 ls s3://your-datalake-bucket-name/parquet/product_category=Camera/ 2021-11-23 18:19:19 65227429 part-00004-495c48e6-96d6-4650-aa65-3c36a3516ddd.c000.snappy.parquet $ aws s3api head-object --bucketyour-datalake-bucket-name--key parquet/product_category=Camera/part-00004-495c48e6-96d6-4650-aa65-3c36a3516ddd.c000.snappy.parquet { "AcceptRanges": "bytes", "LastModified": "Mon, 09 Apr 2018 06:37:07 GMT", "ContentLength": 65227429, "ETag": "\"980669fcf6ccf31d2d686b9cccdd45e3-8\"", "ContentType": "binary/octet-stream", "Metadata": {} }
  4. 创建名为的新文件write-operations1.json并输入以下 JSON:(替换以下 JSON:UriETag, 和Size使用你复制的值。)

    [ { "AddObject": { "Uri": "s3://your-datalake-bucket-name/parquet/product_category=Camera/part-00000-495c48e6-96d6-4650-aa65-3c36a3516ddd.c000.snappy.parquet", "ETag": "d4c25c40f33071620fb31cf0346ed2ec-8", "Size": 65386769, "PartitionValues": [ "Camera" ] } } ]
  5. 要将文件添加到受管理的表中,请使用UpdateTableObjects使用 API 调用write-operations1.json您刚创建的文件。Replace交易 ID用你在开始交易命令中获得的交易 ID。

    $ aws lakeformation update-table-objects --database-name lakeformation_tutorial_amazon_reviews --table-name amazon_reviews_governed --transaction-id transaction-id --write-operations file://./write-operations1.json
  6. 接下来,在提交交易之前,通过调用GetTableObjects具有相同交易 ID 的 API:(替换交易 ID拿着你进来的身份证start-transaction命令)。您需要运行此命令两次,因为上述更改第一次尚未应用于事务。第二次,UpdateTableObjects操作将成功。

    $ aws lakeformation get-table-objects --database-name lakeformation_tutorial_amazon_reviews --table-name amazon_reviews_governed --transaction-id transaction-id { "Objects": [ { "PartitionValues": [ "Camera" ], "Objects": [ { "Uri": "s3://your-datalake-bucket-name/parquet/product_category=Camera/part-00000-495c48e6-96d6-4650-aa65-3c36a3516ddd.c000.snappy.parquet", "ETag": "d4c25c40f33071620fb31cf0346ed2ec-8", "Size": 65386769 } ] } ] }
  7. 提交交易,以便在此交易之外向其他用户提供此数据。为此,调用CommitTransactionAPI:(替换交易 ID使用你在开始交易命令中获得的交易 ID)。

    $ aws lakeformation commit-transaction --transaction-id transaction-id

    在提交更改之后立即注意当前日期-时间UpdateTableObjectsAPI 调用。在本示例后面,我们将此时间戳用于时间旅行查询。

    $ date -u Wed May 26 08:12:00 UTC 2021

    提交交易之后,你可以在 Lake Formation 控制台上看到分区https://console.aws.amazon.com/lakeformation/.

使用以下命令在所有分区中添加所有文件:

  1. 调用StartTransactionAPI 开始另一笔 Lake Formation 交易。

    $ aws lakeformation start-transaction { "TransactionId": "c96cdbeab7e34b35a383faa75b372234" }
  2. 列出位于上的 Amazon S3 对象amazon-reviews-pds存储桶以选择另一个示例文件。

    s3://your-datalake-bucket-name/parquet/product_category=Books/ 2018-04-09 15:35:58 1094842361 part-00000-495c48e6-96d6-4650-aa65-3c36a3516ddd.c000.snappy.parquet
  3. 调用HeadObject针对一个示例文件的 API 以便复制ETagSize.

    $ aws s3api head-object --bucket your-datalake-bucket-name --key parquet/product_category=Books/part-00000-495c48e6-96d6-4650-aa65-3c36a3516ddd.c000.snappy.parquet { "AcceptRanges": "bytes", "LastModified": "Mon, 09 Apr 2018 06:35:58 GMT", "ContentLength": 1094842361, "ETag": "\"9805c2c9a0459ccf337e01dc727f8efc-131\"", "ContentType": "binary/octet-stream", "Metadata": {} }
  4. 创建名为的新文件write-operations2.json并输入以下 JSON:(替换以下 JSON:URIETag, 和Size使用你复制的值。)

    [ { "AddObject": { "Uri": "s3://your-datalake-bucket-name/parquet/product_category=Books/part-00000-495c48e6-96d6-4650-aa65-3c36a3516ddd.c000.snappy.parquet", "ETag": "9805c2c9a0459ccf337e01dc727f8efc-131", "Size": 1094842361, "PartitionValues": [ "Books" ] } } ]
  5. 调用UpdateTableObjects使用写操作的 API 2.json: (替换交易 ID使用你在开始交易命令中获得的交易 ID)。

    $ aws lakeformation update-table-objects --database-name lakeformation_tutorial_amazon_reviews --table-name amazon_reviews_governed --transaction-id transaction-id --write-operations file://./write-operations2.json
  6. 调用CommitTransactionAPI:(替换交易 ID使用你在开始交易命令中获得的交易 ID)。

    $ aws lakeformation commit-transaction --transaction-id transaction-id

    Lake Formation 控制台上可以看到这两个分区,https://console.aws.amazon.com/lakeformation/.