

# データベース、テーブル、列に名前を付ける
<a name="tables-databases-columns-names"></a>

Athena のデータベース、テーブル、列の名前付けについては、これらのガイドラインを参照してください。

## データベース、テーブル、および列の名前要件
<a name="tables-databases-columns-names-requirements"></a>
+ AWS Glue 内のデータベース名、テーブル名、および列名で使用できる文字は、UTF-8 文字列で、小文字である必要があります。Athena は、データベース、テーブル、または列を作成するときに、DDL クエリの大文字名を自動的に下げることに注意してください。文字列は、1 バイト以上、255 バイト未満の長さにする必要があります。
+ 現在、名前の先頭に先行スペースを含めることができます。このような先行スペースは検出が難しく、作成後にユーザビリティ問題を引き起こす可能性があるため、先頭にスペースがあるオブジェクト名を不用意に作成することを回避してください。
+ AWS Glue データベースを作成するために、[AWS::Glue::Database](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-database.html) の CloudFormation テンプレートを、データベース名を指定せずに使用した場合は、AWS Glue が自動的にデータベース名を生成します。この形式は *resource\$1name–random\$1string* となり、Athena との互換性がなくなります。
+ AWS Glue Catalog Manager では、列の名前を変更できますが、テーブル名やデータベース名は変更できません。この制限を回避するには、古いデータベースの定義を使用して、新しい名前のデータベースを作成する必要があります。次に、古いデータベースのテーブルの定義を使用して、新しいデータベースにテーブルを再度作成します。これには、AWS CLI または AWS Glue SDK を使用できます。手順については、「[AWS CLI を使用して AWS Glue データベースとそのテーブルを再度作成する](glue-recreate-db-and-tables-cli.md)」を参照してください。

## Athena のテーブル名とテーブルの列名に小文字を使用する
<a name="table-names-and-table-column-names-in-ate-must-be-lowercase"></a>

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

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

## アンダースコアで始まる名前
<a name="names-that-begin-with-an-underscore"></a>

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

```
CREATE EXTERNAL TABLE IF NOT EXISTS `_myunderscoretable`(
  `_id` string, `_index` string)
LOCATION 's3://amzn-s3-demo-bucket/'
```

## 数字で始まるテーブル、ビュー、または列の名前
<a name="table-names-that-include-numbers"></a>

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

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

## 列名と複合型
<a name="tables-databases-columns-names-complex-types"></a>

複合型の場合、列名には、英数字、アンダースコア（`_`)、ピリオド (`.`) のみが使用可能です。カスタム DDL ステートメントを使用すると、テーブルとキーのマッピングの作成に使用する文字を制限できます。詳細については、AWS ビッグデータブログの「[JSONSerDe によるマッピングを使って、入れ子の JSON から Amazon Athena のテーブルを作成する](https://aws.amazon.com/blogs/big-data/create-tables-in-amazon-athena-from-nested-json-and-mappings-using-jsonserde/)」を参照してください。

## 予約語
<a name="tables-databases-columns-names-reserved-words"></a>

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

詳細については、「[クエリで予約キーワードをエスケープする](reserved-words.md)」を参照してください。

## その他のリソース
<a name="tables-databases-columns-names-additional-resources"></a>

データベースおよびテーブル作成の構文の詳細については、次のページを参照してください。
+ [CREATE DATABASE](create-database.md)
+ [CREATE TABLE](create-table.md)

AWS Glue 内のデータベースとテーブルの詳細については、「AWS Glue デベロッパーガイド」の「[データベース](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-databases.html)」と「[テーブル](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html)」を参照してください。