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

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

第 4 步:将表对象添加到受管控表中

要将 Amazon S3 对象添加到受管控表,您需要调用UpdateTableObjectsAPI。你可以用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命令(替换your-datalake-bucket-name使用有效的存储桶名称):

    $ 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:(将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交易编号使用你在 start-transaction 命令中获得的交易 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 :( 替换交易编号用你拿到的身份证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)。

    $ 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. 调用StartTransaction用于启动另一个Lake Formation 事务的 API。

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

    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:(将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)。

    $ 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: (替换交易编号使用你在 start-transaction 命令中获得的事务 ID)。

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

    现在 Lake Formation 控制台上可见这两个分区https://console.aws.amazon.com/lakeformation/.