Amazon Web Services ブログ

AWS Lake Formation でメタデータを見つける: パート 1

データレイクは、構造化データと非構造化データの両方を保存および分析する単一のリポジトリを作成する方法として、ますます定評が高まっていますAWS Lake Formation を使用すると、データレイクの設定、セキュリティ保護、管理が簡単になります。この記事では、Lake Formation を使用したデータレイクの作成と探索について説明します。

  • データレイクの作成

o  データレイクへのデータの追加

o  カタログデータベースの作成

o  Amazon S3 からカタログデータベースへのテーブルの追加

  • カタログ内でのメタデータの編集および追加

o  標準メタデータの編集

o  カスタムメタデータの追加

前提条件

この記事では、以下が必要です。

データレイクを作成する

AWS Lake Formation コンソールの左側のナビゲーションペインで、[Register and ingest]、[Data lake locations] を選択します。単一の S3 バケットを選択して、データレイクで複数の独立したデータソースを保存します。詳細については、AWS Lake Formation とはを参照してください。

データレイクにデータを追加する

これで、Lake Formation のストレージリソースとして S3 バケットを設定できたので、データレイクにデータを追加する必要があります。AWS SDK、AWS CLI、S3 コンソール、または Lake Formation 設計図、データレイクの S3 バケットストレージリソースにデータを追加することができます。

Lake Formation を使用すると、ソースデータの取り込みを検出および設定できます。データレイクをロードまたは更新するワークフローを追加する場合、追加するインポーターのタイプの設計図またはテンプレートを選択できます。Lake Formation は、一般的なソースデータタイプのための Lake Formation コンソールでいくつかの設計図を提供し、ワークフローの作成を簡素化します。ワークフローはデータソースとターゲットを指し、実行する頻度を指定します。

この記事では、AWS CLI を使用してサンプルデータをダウンロードし、S3 ストレージバックエンドにアップロードします。Lake Formation データインポーターなどの他のインポート方法は、この記事の範囲外です。

AWS のオープンデータのレジストリで提供されている次の 2 つのデータセットのサンプル:

データレイクで、Amazon カスタマーレビューデータセットのコピーを 2 つ作成します。これらを使用して、「本番」および「テスト」のデータセットをシミュレーションし、メタデータカタログを検索するときに一方または両方をターゲットにする方法を学習できます。

AWS データレイクの柔軟性を実証するには、CSV と Parquet データセットの両方をデータレイクに追加します。どちらの場合も、S3 オブジェクトには次の命名規則を使用してください。

s3://BUCKET_NAME/DATABASE_NAME/TABLE_NAME/<data files>

Amazon カスタマーレビューをデータレイクに追加する

AWS はレジストリをホストして、人々がさまざまなデータセットを共有および発見できるようにサポートしています。この記事では、Amazon カスタマーレビューデータセットのサブセットをデータレイクにコピーします。レビューデータセット全体をコピーする必要はありません。ウォッチレビューの小さい 226 MB の部分のみをコピーします。個別の「本番」データベースと「テスト」データベースをシミュレートするには、データレイクにこのデータの 2 つのコピーが必要です。

  1. まだデータがない場合は、S3 からの読み取りと Lake Formation S3 バケットへの書き込みのアクセス許可を含む IAM ユーザーアクセスキーで AWS CLI をインストールして設定します。
  2. ソースをデータレイクにコピーします。
    # 使用しているバケット名に置き換える:
    YOUR_BUCKET=lf-metadata-demo
     
    aws s3 cp \
       s3://amazon-reviews-pds/parquet/product_category=Watches/ \
       s3://$YOUR_BUCKET/amazon-reviews-prod/amazon-reviews/ --recursive
     
    aws s3 cp \
       s3://amazon-reviews-pds/parquet/product_category=Watches/ \
       s3://$YOUR_BUCKET/amazon-reviews-test/amazon-reviews/ --recursive
  3. S3 コンソールで、S3 バケットに 2 つの Amazon レビューデータセットが含まれていることを確認します。
  4. フォルダの内容を調べます。データセットは、Parquet 形式です。

ニューヨークのタクシー乗車履歴をデータレイクに追加する

Amazon カスタマーレビューデータセットで行ったように、ニューヨークのタクシー乗車履歴の小さなサブセットを AWS のオープンデータのレジストリからデータレイクにコピーします。

  1. ソースデータをデータレイクにコピーします。
    # 使用しているバケット名に置き換える:
    YOUR_BUCKET=lf-metadata-demo
     
    aws s3 cp \
       “s3://nyc-tlc/trip data/green_tripdata_2018-02.csv” \
       “s3://$YOUR_BUCKET/ny-taxi/trip-data/green_tripdata_2018-02.csv”
  2. S3 コンソールで、S3 バケットにニューヨークのタクシー乗車の CSV データが含まれていることを確認します。

カタログデータベースを作成する

データレイクストレージバックエンドとして機能する S3 バケットを作成し、バケットにデータを追加しました。ただし、このデータは、データをカタログ化するまで、Lake Formation ではすぐに使用できません。

Lake Formation は、データレイク内のデータの Hive 互換データカタログを維持します。S3 ストレージバックエンド内でデータをカタログ化したり、Lake Formation データインポーター (後述) を使用してデータを S3 にプッシュしたりする前に、まずデータベースを作成する必要があります。

Lake Formation データベースは、後でテーブルを追加する論理構造です。それぞれのテーブルには、そのテーブルをまとめて表す S3 の 1 つ以上のオブジェクトへのマッピングが含まれます。またテーブルには、ファイル形式、S3 ロケーション、列見出し、列タイプなどの基本的なメタデータも含まれますが、これらに限定されません。Lake Formation ユーザーは、オプションでテーブルと列の任意のキーと値のペアを定義して、データをより適切に記述し、データ検出のクエリ可能な属性として機能させることもできます。

1 つ以上のデータベースを作成し、コンソールで手動で、AWS SDK または AWS CLI を使用してプログラムで、あるいは AWS Glue クローラーを定義して自動的にテーブルにデータを入力することができます。

この記事では、3 つの論理データベースを定義する必要があります。

amazon-reviews-prod

amazon-reviews-test

ny-taxi

次に、カタログ化プロセスを使用して、以前に S3 ストレージバックエンドにアップロードした 2 つのデータセットにマッピングします。Amazon レビューデータセットの 2 つのコピーを意図的に作成して、データレイクの本番データベースとテストデータベースの両方をシミュレートしたことを思い出してください。

ここで、データベースを作成します。最初に、IAM ユーザーとロールを Lake Formation の管理者として設定します。

カタログのアクセス許可は、選択した IAM プリンシパルが直接使用できるアクセス許可です。付与可能なアクセス許可とは、IAM プリンシパルが後で他の IAM プリンシパルに付与できるものです。

たとえば、カタログにアクセス許可を付与することにより、データベース管理者 (DBA) にデータベースを作成する機能を付与できます。ただし、付与可能なアクセス許可を有効にしないことで、DBA が誤って開発者にこのアクセス権を付与するのを防ぐことができます。

これで必要なアクセス許可を付与したので、カタログ内でデータベースを作成することができます。

  • [Name] では、amazon-reviews-prod と入力します。
  • [Location] では、s3://<YOUR_BUCKET>/amazon-reviews-prod と入力します。
  • [Description] には、簡潔で意味のある説明を入力します。
  • このデータベースの新しいテーブルについては、[Grant All to Everyone] をチェックしてください。本番環境では、これが適切かどうかを評価します。

他の 2 つのデータベースに対して、このプロセスを繰り返します。

  • Name: amazon-reviews-test
    Location: s3://<YOUR_BUCKET>/amazon-reviews-test
  • Name: ny-taxi
    Location: s3://<YOUR_BUCKET>/ny-taxi

これらの手順を完了すると、カタログには次の 3 つのデータベースがあります: amazon-reviews-prodamazon-reviews-testny-taxi

S3 からカタログデータベースにテーブルを追加する

前のセクションでは、Lake Formation カタログに 3 つのデータベースを作成しました。ただし、これらのカタログデータベースは空であり、S3 の特定のテーブル、スキーマ、ファイル形式、またはオブジェクトパスに関する情報をまだ提供していません。この情報を追加するには、次の 2 つの方法のいずれかを使用します。

  • コンソール、SDK、または AWS CLI を使用して、カタログでテーブルを手動で定義します。
  • AWS Glue クローラを使用して S3 を検索し、検出されたテーブルをカタログに自動的に追加します。

この記事では、S3 の 3 つのデータセットと Lake Formation データカタログのデータベースのそれぞれに対して 1 つのAWS Glue クローラを手動で作成し、実行します。詳細なウォークスルーは、この記事の範囲外です。ガイダンスについては、AWS Glue コンソールでのクローラの使用を参照してください。

続行する際は、以下に注意してください。

  • 3 つのデータセットのそれぞれについて 1 つのクローラを作成します。ほとんどのデフォルトのクローラ設定を受け入れることができるはずです。ただし、クローラの S3 パスは次のようになります。

s3://YOUR_BUCKET/amazon-reviews-prod/amazon-reviews

s3://YOUR_BUCKET/amazon-reviews-test/amazon-reviews

s3://YOUR_BUCKET/ny-taxi/trip-data

クローラを実行してカタログに入力する前に、クローラに IAM ロールを割り当てる必要があります。このロールは、データレイクの S3 バケットからの読み取り、クローラログの Amazon CloudWatch への書き込み、データカタログの更新のアクセス許可を付与します。新しいロールを作成するか、既存のロールを使用するかに関係なく、IAM ロール名を書き留めます。次のステップでこの情報が必要になります。

IAM 内で定義されたアクセス許可に加えて、IAM プリンシパル (ロールまたはユーザー) に Lake Formation 自体からデータカタログを変更する機能を明示的に付与する必要もあります。概念的には、これは IAM で使用される S3 のバケットポリシーの概念に似ています。Lake Formation コンソールの [Permissions] で、[Data permissions] を選択します。

AWS Glue クローラにデータカタログを変更する機能を付与します。以下のフィールドを設定します。

  • [IAM users and roles] では、前に AWS Glue クローラに使用した IAM ロールを選択します。
  • [Database] では、amazon-reviews-prodamazon-reviews-testny-taxi データベースを選択します。
  • [Database permissions] では、すべてのアクセス許可を選択します。
  • 付与可能なアクセス許可は、すべて選択しないままにします。

AWS Glue クローラが Lake Formation データカタログを変更するアクセス許可を取得したら、AWS Glue コンソールに戻り、3 つのクローラを手動で実行します。数分後、クローラは実行を完了するはずです。それぞれのクローラがデータカタログに 1 つのテーブルを追加する必要があります。

o  amazon-reviews

o  amazon-reviews

o  trip-data

カタログが更新されたことを確認します。Lake Formation コンソールの [Data catalog] で [Tables] を選択し、次のスクリーンショットに示すように、対応するデータレイクデータベースに追加された 3 つの新しいテーブルを表示します。

カタログ内でメタデータを編集および追加する

AWS Glue クローラは、オブジェクトのロケーション、ファイル形式、列見出し、列タイプなどの属性を含め (ただしこれらに限定されず) S3 で検出したテーブルに関する標準メタデータを入力します。

ただし、標準メタデータを手動で編集するか、カタログに追加のカスタムメタデータを追加して、検索を容易にし、提供される全体的な価値を向上させることができます。次のセクションでは、メタデータの編集と追加のいくつかの例を詳しく説明します。

標準メタデータを編集する

AWS Glue クローラは、CSV ファイルの最初の行から列の名前を推測します。ny_taxi テーブルの自動入力された列名を表示するには、テーブルプロパティを確認します。

  1. [Data catalog] で、[Tables] を選択します。
  2. [ny_taxi] を選択し、[Schema ] セクションまで下にスクロールします。
  3. [Edit Schema] を選択します。データ列の名前は常にスネークケーシングを使用する必要があります。つまり、単語の間に「_」文字を使用する必要があります。すべての id 列を、残りの列と一致するように変更します。未処理データの最初の行を見ると、一貫性のない名前が使用されていることがわかります。これらのファイルを変更する代わりに、メタデータを手動で変更できます。
  4. vendorid 行を選択して、[Edit] を選択します。スネークケーシングを含めるように変更し、[Save] を選択します。
  5. dolocationidratecodeidpulocationid に対して次の手順を繰り返します。これらの変更を行ったら、[Save as new version] を選択します。
  6. [Data catalog] で、[Tables] を選択します。pulocationid を検索した場合、結果は返されません。
  7. 新しい列名 pu_location_id を検索します。この検索では、予想される結果、つまり ny-taxi データベースの trip_data テーブルが返されます。

カスタムメタデータを追加する

ここで、いくつかのカスタムテーブルプロパティを追加して、テーブルの整理に役立てます。追加する最初のテーブルプロパティは、テーブルが開発用、テスト用、または本番稼働用かどうかを判断するのに役立つ environment 変数です。追加する 2 番目のテーブルプロパティは department 変数で、部門ごとにテーブルをグループ化できます。

  1. Lake Formation コンソールの [Data catalog] で、[Databases] を選択します。
  2. ny-taxi データベースを選択し、[View tables] を選択します。
  3. trip_data テーブルを選択し、[Edit Table] を選択します。
  4. [Table properties] で、[Add] を選択します。environmentの値を dev に、department の値をresearch1 に設定します。[Save] を選択します。
  5. [Data catalog] で、[Tables] を選択します。検索バーに「research」と入力して、Enter キーを押します。research のテーブルプロパティ値を持つテーブルがないため、結果は返されません。ただし、research1 を検索すると、trip_data テーブルが返されるはずです。
  6. trip-data のテーブルプロパティに戻り、department プロパティを research1 から research に更新します。編集を行った後、テーブル検索のキーワードとして「research」と入力すると、trip-data テーブルが表示されます。

まとめ

おめでとうございます。これで、Lake Formation を使用して最初のデータレイクを正常に作成および編集できました。サービスを使用して、データを保護し、S3 データレイクに取り込み、データをカタログ化し、データソースのメタデータをカスタマイズしました。このシリーズのパート 2 では、Lake Formation のメタデータ検索機能を使用してデータを検出する方法を示します。

 


著者について

Julia Soscia はアマゾン ウェブ サービスのソリューションズアーキテクトで、ニューヨーク市を拠点にしています。彼女のメインテーマは、顧客が AWS クラウドプラットフォームで well-architected 環境を構築するのを支援することです。彼女は、ビッグデータと分析に焦点を当てた経験豊富なデータアナリストです。

 

 

 

Eric Weinberg は、AWS Envision Engineering チームのシステム開発エンジニアです。彼は、ソフトウェアアプリケーションの構築と設計で 15 年の経験があります。

 

 

 

 

Francesco Marelli は、アマゾン ウェブ サービスのシニアソリューションアーキテクトです。彼は、分析とデータ管理で 20 年以上の経験があります。

 

 

 

 

Mat Werber は、AWS コミュニティ SA チームのソリューションアーキテクトです。 彼は、サーバーレス、Redshift、DynamoDB、および RDS に焦点を当てた AWS スタック全域におよぶアーキテクチャ関連のガイダンスを提供する責任を担っています。また、IT ガバナンス、リスク、管理の監査に関するバックグラウンドも備えています。