テーブル、データベース、および列の名前 - Amazon Athena

テーブル、データベース、および列の名前

Athena のデータベースオブジェクトに命名するには、以下のヒントを参考にしてください。

データベース、テーブル、および列の名前要件

  • AWS Glue 内のデータベース名、テーブル名、および列名で使用できる文字は、UTF-8 文字列である必要があります。文字列は、1 バイト以上、255 バイト未満の長さにする必要があります。この制限を超えると、「Value at 'name' failed to satisfy constraint: Member must have length less than or equal to 255」などのエラーが生成されます。使用できる文字にはスペースが含まれ、以下にある単一行の文字列パターンで定義されます。

    [\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]*
  • 現在、AWS Glue regex パターンでは、名前の先頭にスペースを追加することができます。このような先頭のスペースは検出が難しく、作成後にユーザビリティ問題を引き起こす可能性があるため、先頭にスペースがあるオブジェクト名は作成しないようにしてください。

  • AWS Glue データベースを作成するために、AWS::Glue::Database の AWS CloudFormation テンプレートを、データベース名を指定せずに使用した場合は、AWS Glue が自動的にデータベース名を生成します。この形式は resource_name–random_string となり、Athena との互換性がなくなります。

  • AWS Glue Catalog Manager では、列の名前を変更できますが、テーブル名やデータベース名は変更できません。この制限を回避するには、古いデータベースの定義を使用して、新しい名前のデータベースを作成する必要があります。次に、古いデータベースのテーブルの定義を使用して、新しいデータベースにテーブルを再度作成します。これには、AWS CLI または AWS Glue SDK を使用できます。この手順については、「AWS CLI を使用して AWS Glue データベースとそのテーブルを再度作成する」を参照してください。

Athena のテーブル名とテーブルの列名に小文字を使用する

Athena では大文字と小文字の DDL クエリと DML クエリを受け入れますが、クエリを実行するときの名前は小文字になります。このため、テーブル名や列名で大文字と小文字を混在させることは避け、そのような名前を区別するために、大文字と小文字の区別だけに依存しないでください。例えば、DDL ステートメントを使用して Castle という名前の列を作成する場合、作成される列は小文字で castle になります。また、DML クエリで列名を Castle または CASTLE に指定すると、Athena はクエリを実行する際の名前を小文字にし、クエリで選択した大文字と小文字を使用して列見出しを表示します。

データベース、テーブル、および列名は 255 文字以下である必要があります。

アンダースコアで始まる名前

テーブルを作成するときは、アンダースコアで始まるテーブル名、ビュー名、または列名はバックティックで囲みます。以下に例を示します。

CREATE EXTERNAL TABLE IF NOT EXISTS `_myunderscoretable`( `_id` string, `_index` string) LOCATION 's3://DOC-EXAMPLE-BUCKET/'

数字で始まるテーブル、ビュー、または列の名前

SELECTCTAS、または VIEW クエリを実行するときは、数字で始まるテーブル名、ビュー名、または列名といった識別子を引用符で囲みます。以下に例を示します。

CREATE OR REPLACE VIEW "123view" AS SELECT "123columnone", "123columntwo" FROM "234table"

列名と複合型

複合型の場合、列名には、英数字、アンダースコア(_)、ピリオド (.) のみが使用可能です。カスタム DDL ステートメントを使用すると、テーブルとキーのマッピングの作成に使用する文字を制限できます。詳細については、AWS ビッグデータブログの「JSONSerDe によるマッピングを使って、入れ子の JSON から Amazon Athena のテーブルを作成する」を参照してください。

予約語

Athena の特定の予約語は、エスケープする必要があります。DDL ステートメントで予約キーワードをエスケープするには、バックティック (`) で囲みます。SQL の SELECT ステートメントや ビュー のクエリで予約キーワードをエスケープするには、二重引用符 ('') で囲みます。

詳細については、「予約済みキーワード」を参照してください。

追加リソース

データベースおよびテーブル作成の構文の詳細については、次のページを参照してください。

AWS Glue 内のデータベースとテーブルの詳細については、「AWS Glue デベロッパーガイド」の「データベース」と「テーブル」を参照してください。