AWS Glue を使用した Amazon S3 内のデータソースへの接続 - Amazon Athena

AWS Glue を使用した Amazon S3 内のデータソースへの接続

Athena は、テーブルや列の名前などのメタデータを保存するために、AWS Glue Data Catalog を使用して Amazon S3 に保存されたデータに接続できます。接続が確立されると、データベース、テーブル、およびビューが Athena のクエリエディタに表示されます。

AWS Glue が使用するスキーマ情報を定義するには、情報を自動的に取得する AWS Glue クローラを作成するか、手動でテーブルを追加してそこにスキーマ情報を入力します。

AWS Glue クローラの作成

クローラの作成には、まず Athena コンソールを起動し、それと合わせて AWS Glue コンソールを使用します。クローラーを作成する際には、Amazon S3 内にあるクロール対象のデータの場所を指定します。

Athena コンソールから AWS Glue のクローラを作成するには
  1. https://console.aws.amazon.com/athena/ で Athena コンソールを開きます。

  2. クエリエディタの [Tables and views] (テーブルとビュー) の横にある [Create] (作成) を選択し、その後 [AWS Glue crawler] を選択します。

  3. AWS Glue コンソールの [Add crawler (クローラの追加)] ページで、次の手順に従いクローラを作成します。詳細については、このガイドの「AWS Glue クローラの使用」、ならびに「AWS Glue デベロッパーガイド」の「AWS Glue Data Catalog の入力」を参照してください。

注記

Athena は、AWS Glue クローラに指定した除外パターンを認識しません。例えば、.csv.json ファイルの両方が含まれる Amazon S3 バケットがある場合、.json ファイルをクローラから除外しても、Athena は両方のファイルのグループをクエリします。これを回避するには、除外するファイルを別の場所に配置します。

フォームを使用したテーブルの追加

以下の手順で、テーブルの追加のために、Athena コンソールの [Create Table From S3 bucket data] (S3 バケットデータからテーブルを作成) フォームを使用する方法を説明します。

フォームによりテーブルを追加してスキーマ情報を入力するには
  1. https://console.aws.amazon.com/athena/ で Athena コンソールを開きます。

  2. クエリエディタで、[Tables and views] (テーブルとビュー) の横にある [Create] (作成) をクリックし、次に [S3 bucket data] (S3 バケットデータ) をクリックします。

  3. [Create Table From S3 bucket data] (S3 バケットデータからテーブルを作成) フォームで、[Table name] (テーブル名) にテーブルの名前を入力します。

  4. [Database configuration] (データベース設定) で既存のデータベースを選択するか、新しいデータベースを作成します。

  5. [Location of Input Data Set] (入力データセットの場所) に、処理するデータセットが含まれるフォルダへの Amazon S3 のパスを指定します。パスにはファイル名を含めないでください。Athena で、指定したフォルダ内のすべてのファイルがスキャンされます。データが既に分割されている場合 (例:

    s3://DOC-EXAMPLE-BUCKET/logs/year =2004/month=12/day=11/)、ベースパスのみを入力します (例: s3://DOC-EXAMPLE-BUCKET/logs/)。

  6. [Data Format] (データ形式) で、次のオプションから選択します。

    • [Table type] (テーブルタイプ) には、[Apache Hive] (アパッチハイブ)、[Apache Iceberg] (アパッチアイスバーグ)、または [Delta Lake] (デルタレイク) を選択してください。Athena では Apache Hive テーブルタイプがデフォルトとして使用されます。Athena での Apache Iceberg テーブルのクエリについては、「Iceberg テーブルの使用」を参照してください。Athena での Delta Lake テーブルの使用に関する情報は、「Delta Lake テーブルのクエリを実行する」を参照してください。

    • [File format] (ファイル形式) で、データに適用されているファイル形式またはログ形式を選択します。

      • [Text File with Custom Delimiters (カスタム区切り記号のあるテキストファイル)] オプションでは、[Field terminator (フィールドターミネータ)](列区切り記号)を指定します。オプションで、配列型の終わりを示す [Collection terminator] (コレクションターミネータ) またはマップデータタイプの終わりを示す [Collection terminator] (コレクションターミネータ) を指定できます。

    • [SerDe library] (SerDe ライブラリ) – SerDe (シリアライザー/デシリアライザー) ライブラリは特定のデータ形式を解析して、Athena でそのデータ形式のテーブルを作成できるようにします。ほとんどの形式では、デフォルトの SerDe ライブラリが自動的に選択されます。次の形式については、要件に応じてライブラリを選択してください。

      • [Apache Web Logs] (Apache ウェブログ) – [RegexSerDe] または [GrokSerDe] ライブラリのどちらかを選択します。RegexSerDe の場合は、[Regex definition] (Regex の定義) ボックスに正規表現を入力します。GrokSerDe の場合は、input.format SerDe プロパティに一連の名前付き正規表現を入力します。名前付き正規表現は、正規表現よりも読みやすく、管理しやすいです。詳細については、「Simple Storage Service (Amazon S3) に保存されている Apache ログのクエリ」を参照してください。

      • [CSV] – カンマ区切り (CSV) データに二重引用符で囲まれた値が含まれていない場合、または java.sql.Timestamp 形式を使用している場合は、[LazySimpleSerDe] を選択します。引用符で囲まれた部分がデータに含まれている場合や、TIMESTAMP に UNIX の数値形式 (例: 1564610311) を使用している場合は、[OpenCSVSerDe] を選択します。詳細については、CSV、TSV、およびカスタム区切りファイルの LazySimpleSerDe および CSV を処理するための OpenCSVSerDe を参照してください。

      • [JSON][OpenX] または [Hive] JSON SerDe ライブラリのどちらかを選択します。どちらの形式でも、各 JSON ドキュメントが、1 行のテキストに存在し、フィールドが改行文字で区切られていないことが想定されます。OpenX SerDe にはいくつかの追加プロパティがあります。これらのプロパティの詳細については、「OpenX JSON SerDe」を参照してください。Hive SerDe については、「Hive JSON SerDe」を参照してください。

      Athena で SerDe ライブラリを使用する方法の詳細については、「サポートされる SerDes とデータ形式」を参照してください。

  7. [SerDe properties] (SerDe プロパティ) で、使用している SerDe ライブラリと要件に従って、プロパティと値を追加、編集、または削除します。

    • SerDe プロパティを追加するには、[Add SerDe property] (SerDe プロパティを追加) を選択します。

    • [Name] (名前) フィールドに、プロパティの名前を入力します。

    • [Value] (値) フィールドに、プロパティの値を入力します。

    • SerDe プロパティを削除するには、[Remove] (削除) を選択します。

  8. [Table properties] (テーブルプロパティ) で、要件に従ってテーブルプロパティを選択または編集します。

    • [Write compression] (書き込み圧縮) で、圧縮オプションを選択します。書き込み圧縮オプションが使用可能かどうかと、使用可能な圧縮オプションは、データ形式によって異なります。詳細については、「Athena での圧縮のサポート」を参照してください。

    • [Encryption] (暗号化) で、元のデータが Amazon S3 で暗号化されていれば [Encrypted data set] (暗号化されたデータセット) を選択します。このオプションで、CREATE TABLE ステートメント内の has_encrypted_data テーブルプロパティが true に設定されます。

  9. [Column details] (列の詳細) に、テーブルに追加する列の名前とデータ型を入力します。

    • 列を 1 つずつ追加するには、[Add a column (列の追加)] を選択します。

    • すばやく列を追加するには、[Bulk add columns (列を一括追加)] を選択します。テキストボックスに、列のカンマ区切りのリストを column_name data_type, column_name data_type[, ...], の形式で入力し、[Add] (追加) を選択します。

  10. (オプション) [Partition details] (パーティションの詳細) に、1 つ以上の列名とデータ型をそれぞれ追加します。パーティション分割では、関連するデータが列の値に基づいてまとめられるため、クエリごとにスキャンされるデータ量を減らすことができます。パーティショニングについては、「Athena でのデータのパーティション化」を参照してください。

  11. (オプション) [Bucketing] (バケット化) で、グループ化する行を含む 1 つまたは複数の列を指定し、それらの行を複数のバケットに入れることができます。これにより、バケット化された列の値が指定されている場合に、読み取るバケットのみをクエリできます。

    • [Buckets] (バケット) で、一意の値 (プライマリキーなど) が多く、クエリ内のデータのフィルタリングによく使用される列を 1 つまたは複数選択します。

    • [Number of buckets] (バケット数) に、ファイルを最適なサイズにすることができる数値を入力します。詳細については、AWS ビッグデータブログの「Top 10 Performance Tuning Tips for Amazon Athena」(Amazon Athena のパフォーマンスチューニングための上位 10 件のヒント) を参照してください。

    • バケット列を指定するには、CREATE TABLE ステートメントで次の構文を使用します。

      CLUSTERED BY (bucketed_columns) INTO number_of_buckets BUCKETS
    注記

    [Bucketing] (バケット化) オプションは、[Iceberg] テーブルタイプでは使用できません。

  12. [Preview table query] (テーブルクエリのプレビュー) ボックスに、フォームで入力した情報を基に生成された CREATE TABLE ステートメントが表示されます。プレビューでのステートメントを、直接編集することはできません。ステートメントを変更するには、プレビューの上にあるフォームのフィールドを変更します。あるいは、フォームを使用する代わりに、クエリエディタでステートメントを直接作成します。

  13. [Create table] (テーブルの作成) をクリックして、そこで生成されたステートメントをクエリエディタ内で実行し、テーブルを作成します。