

# DDL ステートメント
<a name="ddl-reference"></a>

Athena で直接、ここに記載されている、サポートされているデータ定義言語 (DDL) ステートメントを使用します。Athena クエリエンジンの一部は、[HiveQL DDL](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL) に基づいています。Athena はすべての DDL ステートメントをサポートしておらず、HiveQL DDL と Athena DDL にはいくつかの違いがあります。詳細については、このセクションのリファレンストピック、および「[サポートされない DDL](unsupported-ddl.md)」を参照してください。

**Topics**
+ [サポートされない DDL](unsupported-ddl.md)
+ [ALTER DATABASE SET DBPROPERTIES](alter-database-set-dbproperties.md)
+ [ALTER TABLE ADD COLUMNS](alter-table-add-columns.md)
+ [ALTER TABLE ADD PARTITION](alter-table-add-partition.md)
+ [ALTER TABLE CHANGE COLUMN](alter-table-change-column.md)
+ [ALTER TABLE DROP PARTITION](alter-table-drop-partition.md)
+ [ALTER TABLE RENAME PARTITION](alter-table-rename-partition.md)
+ [ALTER TABLE REPLACE COLUMNS](alter-table-replace-columns.md)
+ [ALTER TABLE SET LOCATION](alter-table-set-location.md)
+ [ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md)
+ [ALTER VIEW DIALECT](alter-view-dialect.md)
+ [CREATE DATABASE](create-database.md)
+ [CREATE TABLE](create-table.md)
+ [CREATE TABLE AS](create-table-as.md)
+ [CREATE VIEW](create-view.md)
+ [DESCRIBE](describe-table.md)
+ [DESCRIBE VIEW](describe-view.md)
+ [DROP DATABASE](drop-database.md)
+ [DROP TABLE](drop-table.md)
+ [DROP VIEW](drop-view.md)
+ [MSCK REPAIR TABLE](msck-repair-table.md)
+ [SHOW COLUMNS](show-columns.md)
+ [SHOW CREATE TABLE](show-create-table.md)
+ [SHOW CREATE VIEW](show-create-view.md)
+ [SHOW DATABASES](show-databases.md)
+ [SHOW PARTITIONS](show-partitions.md)
+ [SHOW TABLES](show-tables.md)
+ [SHOW TBLPROPERTIES](show-tblproperties.md)
+ [SHOW VIEWS](show-views.md)

# サポートされない DDL
<a name="unsupported-ddl"></a>

以下の DDL ステートメントは、Athena SQL でサポートされません。Athena の Iceberg テーブルでサポートされている DDL ステートメントについては、「[Iceberg テーブルスキーマを進化させる](querying-iceberg-evolving-table-schema.md)」および「[Iceberg テーブルに対して他の DDL オペレーションを実行する](querying-iceberg-additional-operations.md)」を参照してください。
+ ALTER INDEX
+ ALTER TABLE *table\$1name* ARCHIVE PARTITION
+ ALTER TABLE *table\$1name* CLUSTERED BY
+ ALTER TABLE *table\$1name* DROP COLUMN (Iceberg テーブルでサポート)
+ ALTER TABLE *table\$1name* EXCHANGE PARTITION
+ ALTER TABLE *table\$1name* NOT CLUSTERED
+ ALTER TABLE *table\$1name* NOT SKEWED
+ ALTER TABLE *table\$1name* NOT SORTED
+ ALTER TABLE *table\$1name* NOT STORED AS DIRECTORIES
+ ALTER TABLE *table\$1name* partitionSpec CHANGE COLUMNS
+ ALTER TABLE *table\$1name* partitionSpec COMPACT
+ ALTER TABLE *table\$1name* partitionSpec CONCATENATE
+ ALTER TABLE *table\$1name* partitionSpec SET FILEFORMAT
+ ALTER TABLE *table\$1name* RENAME TO (Iceberg テーブルでサポート)
+ ALTER TABLE *table\$1name* SET SERDEPROPERTIES
+ ALTER TABLE *table\$1name* SET SKEWED LOCATION
+ ALTER TABLE *table\$1name* SKEWED BY
+ ALTER TABLE *table\$1name* TOUCH
+ ALTER TABLE *table\$1name* UNARCHIVE PARTITION
+ COMMIT
+ CREATE INDEX
+ CREATE ROLE
+ CREATE TABLE *table\$1name* LIKE *existing\$1table\$1name* 
+ CREATE TEMPORARY MACRO
+ DELETE FROM
+ DESCRIBE DATABASE
+ DFS
+ DROP INDEX
+ DROP ROLE
+ DROP TEMPORARY MACRO
+ EXPORT TABLE
+ GRANT ROLE
+ IMPORT TABLE
+ LOCK DATABASE
+ LOCK TABLE
+ REVOKE ROLE
+ ROLLBACK
+ SHOW COMPACTIONS
+ SHOW CURRENT ROLES
+ SHOW GRANT
+ SHOW INDEXES
+ SHOW LOCKS
+ SHOW PRINCIPALS
+ SHOW ROLE GRANT
+ SHOW ROLES
+ SHOW STATS
+ SHOW TRANSACTIONS
+ START TRANSACTION
+ UNLOCK DATABASE
+ UNLOCK TABLE

# ALTER DATABASE SET DBPROPERTIES
<a name="alter-database-set-dbproperties"></a>

データベースのプロパティを 1 つ以上作成します。`DATABASE` と `SCHEMA` は、どちらを使用しても同じように機能します。

## 概要
<a name="synopsis"></a>

```
ALTER {DATABASE|SCHEMA} database_name
  SET DBPROPERTIES ('property_name'='property_value' [, ...] )
```

## パラメータ
<a name="parameters"></a>

**SET DBPROPERTIES ('property\$1name'='property\$1value' [, ...]**  
データベースのプロパティを `property_name` として指定し、各プロパティの値を `property_value` として設定します。`property_name` が既に存在する場合、古い値は `property_value` で上書きされます。

## 例
<a name="examples"></a>

```
ALTER DATABASE jd_datasets
  SET DBPROPERTIES ('creator'='John Doe', 'department'='applied mathematics');
```

```
ALTER SCHEMA jd_datasets
  SET DBPROPERTIES ('creator'='Jane Doe');
```

# ALTER TABLE ADD COLUMNS
<a name="alter-table-add-columns"></a>

既存のテーブルに 1 つ以上の列を追加します。オプションの `PARTITION` 構文を使用すると、パーティションメタデータが更新されます。

## 概要
<a name="synopsis"></a>

```
ALTER TABLE table_name 
  [PARTITION 
   (partition_col1_name = partition_col1_value
   [,partition_col2_name = partition_col2_value][,...])]
  ADD COLUMNS (col_name data_type)
```

## パラメータ
<a name="parameters"></a>

**PARTITION (partition\$1col\$1name = partition\$1col\$1value [,...])**  
ユーザー指定の列名/値の組み合わせでパーティションを作成します。列のデータ型が文字列である場合にのみ、`partition_col_value` を引用符で囲みます。

**ADD COLUMNS (col\$1name data\$1type [,col\$1name data\$1type,...])**  
既存の列の後、パーティション列の前に列を追加します。

## 例
<a name="examples"></a>

```
ALTER TABLE events ADD COLUMNS (eventowner string)
```

```
ALTER TABLE events PARTITION (awsregion='us-west-2') ADD COLUMNS (event string)
```

```
ALTER TABLE events PARTITION (awsregion='us-west-2') ADD COLUMNS (eventdescription string)
```

## メモ
<a name="alter-table-add-columns-notes"></a>
+ `ALTER TABLE ADD COLUMNS` の実行後に Athena クエリエディタのナビゲーションペインで新しいテーブル列を表示するには、エディタのテーブルリストを手動で更新してから、テーブルをもう一度展開します。
+ `ALTER TABLE ADD COLUMNS` は、`date` データ型の列では機能しません。この問題の回避策は、代わりに `timestamp` データ型を使用することです。

# ALTER TABLE ADD PARTITION
<a name="alter-table-add-partition"></a>

テーブルのパーティション列を 1 つ以上作成します。各パーティションは、1 つ以上の異なる列名/値の組み合わせで構成されます。指定した組み合わせごとに別個のデータディレクトリが作成されます。これにより、クエリパフォーマンスが向上する場合があります。パーティション分割された列は、テーブルのデータ自体内には存在しないため、テーブル内の列自体と同じ名前を使用すると、エラーになります。詳細については、「[データのパーティション化](partitions.md)」を参照してください。

Athena では、テーブルとそのパーティションが同じデータ形式を使用する必要がありますが、スキーマは異なる場合があります。詳細については、「」を参照してください[パーティションを使用してテーブルを更新する](updates-and-partitions.md)

IAM ポリシーで必要とされるリソースレベルのアクセス許可 (`glue:CreatePartition` を含む) については、「[AWS Glue API アクセス許可: アクションとリソースのリファレンス](https://docs.aws.amazon.com/glue/latest/dg/api-permissions-reference.html)」および「[AWS Glue Data Catalog のデータベースとテーブルへのアクセスを構成する](fine-grained-access-to-glue-resources.md)」を参照してください。Athena を使用する際のアクセス許可に関するトラブルシューティングについては、「[アクセス許可](troubleshooting-athena.md#troubleshooting-athena-permissions)」トピックの「[Athena の問題をトラブルシューティングする](troubleshooting-athena.md)」セクションを参照してください。

## 概要
<a name="synopsis"></a>

```
ALTER TABLE table_name ADD [IF NOT EXISTS]
  PARTITION
  (partition_col1_name = partition_col1_value
  [,partition_col2_name = partition_col2_value]
  [,...])
  [LOCATION 'location1']
  [PARTITION
  (partition_colA_name = partition_colA_value
  [,partition_colB_name = partition_colB_value
  [,...])]
  [LOCATION 'location2']
  [,...]
```

## パラメータ
<a name="parameters"></a>

パーティションを追加するときは、パーティションの 1 つ、または複数の列名/値ペアと、そのパーティションのデータファイルが格納されている Amazon S3 パスを指定します。

**[IF NOT EXISTS]**  
同じ定義のパーティションが既に存在する場合、エラーを抑制します。

**PARTITION (partition\$1col\$1name = partition\$1col\$1value [,...])**  
ユーザー指定の列名/値の組み合わせでパーティションを作成します。列のデータ型が文字列である場合に限り、`partition_col_value` を文字列の文字で囲みます。

**[LOCATION 'location']**  
前のステートメントで定義したパーティションの保存先のディレクトリを指定します。データが Hive スタイルのパーティショニング (`pk1=v1/pk2=v2/pk3=v3`) を使用する場合、`LOCATION` 句はオプションです。Hive スタイルのパーティション化では、テーブルの場所、パーティションキー名、およびパーティションキー値からフル Amazon S3 URI が自動的に作成されます。詳細については、「[データのパーティション化](partitions.md)」を参照してください。

## 考慮事項
<a name="alter-table-add-partition-considerations"></a>

Amazon Athena は、単一の `ALTER TABLE ADD PARTITION` DDL ステートメントに追加できるパーティションの数に特定の制限を設定していません。ただし、大量のパーティションを追加する必要がある場合は、パフォーマンス問題が発生する可能性を避けるため、操作を小規模なバッチに分割することを検討してください。以下の例は、連続するコマンドを使用してパーティションを個別に追加し、`IF NOT EXISTS` を使用して重複するパーティションが追加されないようにしています。

```
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-01')
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-02')
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-03')
```

 Athena でパーティションを使用するときは、以下の点に留意してください。
+ Athena では、1,000 万のパーティションを持つ AWS Glue テーブルへのクエリがサポートされていますが、1 回のスキャンで読み取れるのは、100 万のパーティションまでです。
+ クエリを最適化し、スキャンされるパーティションの数を減らすため、パーティションプルーニングやパーティションインデックスの使用といった戦略を検討してください。

Athena でのパーティションの使用に関するその他の考慮事項については、「[データのパーティション化](partitions.md)」を参照してください。

## 例
<a name="examples"></a>

次の例では、Hive スタイルのパーティション化されたデータ用のテーブルに、1 つのパーティションを追加します。

```
ALTER TABLE orders ADD
  PARTITION (dt = '2016-05-14', country = 'IN');
```

次の例では、Hive スタイルのパーティション化されたデータ用のテーブルに、複数のパーティションを追加します。

```
ALTER TABLE orders ADD
  PARTITION (dt = '2016-05-31', country = 'IN')
  PARTITION (dt = '2016-06-01', country = 'IN');
```

テーブルが Hive スタイルのパーティション化されたデータ向けのものではない場合は、`LOCATION` 句が必要です。この句は、パーティションのデータが含まれるプレフィックスのフル Amazon S3 URI でなければなりません。

```
ALTER TABLE orders ADD
  PARTITION (dt = '2016-05-31', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_31_May_2016/'
  PARTITION (dt = '2016-06-01', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_01_June_2016/';
```

パーティションがすでに存在する場合にエラーを無視するには、次の例のように `IF NOT EXISTS` 句を使用します。

```
ALTER TABLE orders ADD IF NOT EXISTS
  PARTITION (dt = '2016-05-14', country = 'IN');
```

## ゼロバイト `_$folder$` ファイル
<a name="alter-table-add-partition-zero-byte-folder-files"></a>

`ALTER TABLE ADD PARTITION` ステートメントを実行し、すでに存在するパーティションと正しくない Amazon S3 の場所を誤って指定すると、形式 `partition_value_$folder$` のゼロバイトプレースホルダーが Amazon S3 に作成されます。これらのファイルは手動で削除する必要があります。

これを防ぐには、次の例のように、`ALTER TABLE ADD PARTITION` ステートメントで `ADD IF NOT EXISTS` 構文を使用します。

```
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION […]
```

# ALTER TABLE CHANGE COLUMN
<a name="alter-table-change-column"></a>

テーブルの列の名前、タイプ、順序、またはコメントを変更します。

## 概要
<a name="alter-table-change-column-synopsis"></a>

```
ALTER TABLE [db_name.]table_name
  CHANGE [COLUMN] col_old_name col_new_name column_type 
  [COMMENT col_comment] [FIRST|AFTER column_name]
```

## 例
<a name="alter-table-change-column-example"></a>

次の例では、列名 `area` を `zip` に変更し、データ型を整数にして、名前が変更された列を `id` 列の後に配置します。

```
ALTER TABLE example_table CHANGE COLUMN area zip int AFTER id
```

次の例では、`example_table` のメタデータの `zip` 列にコメントを追加します。コメントを表示するには、 AWS CLI [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/get-table-metadata.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/get-table-metadata.html) コマンドを使用するか、AWS Glue コンソールでテーブルのスキーマにアクセスします。

```
ALTER TABLE example_table CHANGE COLUMN zip zip int COMMENT 'USA zipcode'
```

# ALTER TABLE DROP PARTITION
<a name="alter-table-drop-partition"></a>

名前付きテーブルの指定したパーティションを削除します。

## 概要
<a name="synopsis"></a>

```
ALTER TABLE table_name DROP [IF EXISTS] PARTITION (partition_spec) [, PARTITION (partition_spec)]
```

## パラメータ
<a name="alter-table-drop-partition-parameters"></a>

**[IF EXISTS]**  
指定したパーティションが存在しない場合、エラーメッセージを抑制します。

**PARTITION (partition\$1spec)**  
各 `partition_spec` は、列名/値の組み合わせを `partition_col_name = partition_col_value [,...]` という形式で指定します。

## 例
<a name="alter-table-drop-partition-examples"></a>

```
ALTER TABLE orders 
DROP PARTITION (dt = '2014-05-14', country = 'IN');
```

```
ALTER TABLE orders 
DROP PARTITION (dt = '2014-05-14', country = 'IN'), PARTITION (dt = '2014-05-15', country = 'IN');
```

## 注意事項
<a name="alter-table-drop-partition-notes"></a>

`ALTER TABLE DROP PARTITION` ステートメントには、すべてのパーティションを一括に削除するための単一的な構文は存在しません。また、削除するパーティションの範囲を指定するための、フィルタリング条件もサポートされていません。

この点の回避策として、スクリプト内で、AWS Glue API の [GetPartitions](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-partitions.html#aws-glue-api-catalog-partitions-GetPartitions) および [BatchDeletePartition](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-partitions.html#aws-glue-api-catalog-partitions-BatchDeletePartition) アクションを使用できます。`GetPartitions` アクションでは、SQL の `WHERE` 式のような、複雑なフィルター表現がサポートされます。`GetPartitions` を使用して、削除対象のパーティションについてフィルタリングされたリストを作成した後は、`BatchDeletePartition` アクションにより、25 個までのパーティションをまとめて削除できます。

# ALTER TABLE RENAME PARTITION
<a name="alter-table-rename-partition"></a>

パーティション値の名前を変更します。

**注記**  
ALTER TABLE RENAME PARTITION はパーティション列の名前を変更しません。パーティション列の名前を変更するには、AWS Glue コンソールを使用できます。詳細については、このドキュメントで後述する「[AWS Glue でのパーティション列の名前の変更](#alter-table-rename-partition-column-name)」を参照してください。

## 概要
<a name="synopsis"></a>

`table_name` という名前のテーブルの場合、`partition_spec` が指定したパーティション値の名前を、`new_partition_spec` が指定した値に変更します。

```
ALTER TABLE table_name PARTITION (partition_spec) RENAME TO PARTITION (new_partition_spec)
```

## パラメータ
<a name="parameters"></a>

**PARTITION (partition\$1spec)**  
各 `partition_spec` は、列名/値の組み合わせを `partition_col_name = partition_col_value [,...]` という形式で指定します。

## 例
<a name="examples"></a>

```
ALTER TABLE orders 
PARTITION (dt = '2014-05-14', country = 'IN') RENAME TO PARTITION (dt = '2014-05-15', country = 'IN');
```

## AWS Glue でのパーティション列の名前の変更
<a name="alter-table-rename-partition-column-name"></a>

AWS Glue コンソールでパーティション列の名前を変更するには、次の手順を実行します。

**AWS Glue コンソールでテーブルパーティション列の名前を変更する**

1. AWS マネジメントコンソール にサインインし、AWS Glue コンソール ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)) を開きます。

1. ナビゲーションペインで、**[Table]** (テーブル) を選択します。

1. **[テーブル]** ページにある **[テーブルをフィルタリング]** 検索ボックスを使用して、変更するテーブルを見つけます。

1. **[名前]** 列で、変更するテーブルのリンクを選択します。

1. テーブルの詳細ページにある **[スキーマ]** セクションで、次のいずれかを実行します。
   + JSON 形式で名前を変更するには、**[JSON としてスキーマを編集]** を選択します。
   + 名前を直接変更するには、**[スキーマを編集]** を選択します。この手順では、**[スキーマを編集]** を選択します。

1. 名前を変更するパーティション分割された列のチェックボックスにチェックを入れてから、**[編集]** を選択します。

1. **[スキーマエントリの編集]** ダイアログボックスにある **[名前]** に、パーティション列の新しい名前を入力します。

1. **[新しいテーブルバージョンとして保存]** を選択します。このアクションは、パーティション列の名前を更新し、データの個別の物理的コピーを作成することなくスキーマの進化履歴を維持します。

1. テーブルバージョンを比較するには、テーブルの詳細ページで **[アクション]** を選択してから、**[バージョンを比較]** を選択します。

## その他のリソース
<a name="alter-table-rename-partition-additional-resources"></a>

 パーティショニングについての詳細は、「[データのパーティション化](partitions.md)」を参照してください。

# ALTER TABLE REPLACE COLUMNS
<a name="alter-table-replace-columns"></a>

[LazySimpleSerDe](lazy-simple-serde.md) で作成したテーブルから既存の列をすべて削除して、それらを指定された列のセットに置き換えます。オプションの `PARTITION` 構文を使用すると、パーティションメタデータが更新されます。`ALTER TABLE REPLACE COLUMNS` を使用し、保持したい列のみを指定することによって、列をドロップすることもできます。

## 概要
<a name="synopsis"></a>

```
ALTER TABLE table_name 
  [PARTITION 
   (partition_col1_name = partition_col1_value
   [,partition_col2_name = partition_col2_value][,...])]
  REPLACE COLUMNS (col_name data_type [, col_name data_type, ...])
```

## パラメータ
<a name="parameters"></a>

**PARTITION (partition\$1col\$1name = partition\$1col\$1value [,...])**  
ユーザー指定の列名/値の組み合わせでパーティションを指定します。列のデータ型が文字列である場合にのみ、`partition_col_value` を引用符で囲みます。

**REPLACE COLUMNS (col\$1name data\$1type [,col\$1name data\$1type,...])**  
既存の列を、指定された列名とデータ型に置き換えます。

## 注意事項
<a name="alter-table-replace-columns-notes"></a>
+ `ALTER TABLE REPLACE COLUMNS` を実行した後で Athena クエリエディタのナビゲーションペインにテーブル列での変更を表示する場合に、エディタ内でテーブルのリストを手動で更新してから、テーブルの展開が再度必要となる場合があります。
+ `ALTER TABLE REPLACE COLUMNS` は、`date` データ型の列では機能しません。この問題の回避策は、テーブルで `timestamp` データ型を代わりに使用することです。
+ 単一の列だけを置き換える場合でも、構文は `ALTER TABLE table-name REPLACE COLUMNS` (複数形で *columns* を含む形式) とする必要があることに注意してください。置き換えの対象である列だけでなく、維持しておく列も指定する必要があります。これを行わない場合、指定されていない列は削除されます。この構文と動作は Apache Hive DDL から派生したものです。リファレンスについては、Apache ドキュメントの「[Add/Replace Columns](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Add/ReplaceColumns)」(列の追加/置換) を参照してください。

## 例
<a name="alter-table-replace-columns-example"></a>

次の例での ([LazySimpleSerDe](lazy-simple-serde.md) により作成された) テーブル `names_cities` には、`col1`、`col2`、および `col3` という名前の 3 つの列があります。すべての列の型は `string` です。テーブル内の列を表示するために、次のコマンドでは [SHOW COLUMNS](show-columns.md) ステートメントを使用しています。

```
SHOW COLUMNS IN names_cities
```

クエリの結果:

```
col1
col2
col3
```

次の `ALTER TABLE REPLACE COLUMNS` コマンドでは、列の名前を `first_name`、`last_name`、および `city` に置き換えます。基盤となるソースデータは影響を受けません。

```
ALTER TABLE names_cities
REPLACE COLUMNS (first_name string, last_name string, city string)
```

結果をテストするために、再度 `SHOW COLUMNS` が実行されます。

```
SHOW COLUMNS IN names_cities
```

クエリの結果:

```
first_name
last_name
city
```

更新された列名を表示する別の方法として、Athena クエリエディタで[テーブルをプレビュー](creating-tables-showing-table-information.md)する、または独自の`SELECT`クエリを実行することもできます。

# ALTER TABLE SET LOCATION
<a name="alter-table-set-location"></a>

`table_name` という名前のテーブルの場所と、必要に応じて `partition_spec` のパーティションを変更します。

## 概要
<a name="synopsis"></a>

```
ALTER TABLE table_name [ PARTITION (partition_spec) ] SET LOCATION 'new location'
```

## パラメータ
<a name="alter-table-set-location-parameters"></a>

**PARTITION (partition\$1spec)**  
場所を変更するパーティションを `partition_spec` パラメータで指定します。`partition_spec` は、列名/値の組み合わせを `partition_col_name = partition_col_value` という形式で指定します。

**SET LOCATION 'new location'**  
新しい場所を指定します。Amazon S3 の場所にする必要があります。構文については、「[Amazon S3 のテーブルの場所](tables-location-format.md)」を参照してください。

## 例
<a name="alter-table-set-location-examples"></a>

```
ALTER TABLE customers PARTITION (zip='98040', state='WA') SET LOCATION 's3://amzn-s3-demo-bucket/custdata/';
```

# ALTER TABLE SET TBLPROPERTIES
<a name="alter-table-set-tblproperties"></a>

カスタムまたは事前定義されたメタデータプロパティをテーブルに追加して、それらの割り当てられた値を設定します。テーブル内のプロパティを表示するには、[SHOW TBLPROPERTIES](show-tblproperties.md) コマンドを使用します。

Apache Hive の[マネージドテーブル](https://cwiki.apache.org/confluence/display/Hive/Managed+vs.+External+Tables)はサポートされていないため、`'EXTERNAL'='FALSE'` を設定しても効果はありません。

## 概要
<a name="synopsis"></a>

```
ALTER TABLE table_name SET TBLPROPERTIES ('property_name' = 'property_value' [ , ... ])
```

## パラメータ
<a name="parameters"></a>

**SET TBLPROPERTIES ('property\$1name' = 'property\$1value' [ , ... ])**  
追加するメタデータプロパティを `property_name` として指定し、各プロパティの値を `property value` として指定します。`property_name` が既に存在する場合は、その値が新たに指定された `property_value` に設定されます。  
以下の事前定義されたテーブルプロパティには、特別な用途があります。    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/alter-table-set-tblproperties.html)

## 例
<a name="examples"></a>

次の使用例では、テーブルプロパティにコメントノートを追加します。

```
ALTER TABLE orders 
SET TBLPROPERTIES ('notes'="Please don't drop this table.");
```

次の例では、テーブル `existing_table` を変更して、ZSTD 圧縮および ZSTD 圧縮レベル 4 の Parquet ファイル形式を使用します。

```
ALTER TABLE existing_table 
SET TBLPROPERTIES ('parquet.compression' = 'ZSTD', 'compression_level' = 4)
```

# ALTER VIEW DIALECT
<a name="alter-view-dialect"></a>

エンジンダイアレクトを AWS Glue Data Catalog ビューに追加したり、ビューから削除したりします。AWS Glue Data Catalog ビューにのみ適用されます。`Lake Formation` 管理者または定義者の許可が必要です。

AWS Glue Data Catalog ビューの詳細については、「[Athena でデータカタログビューを使用する](views-glue.md)」を参照してください。

## 構文
<a name="alter-view-dialect-syntax"></a>

```
ALTER VIEW name [ FORCE ] [ ADD|UPDATE ] DIALECT AS query
```

```
ALTER VIEW name [ DROP ] DIALECT
```

**FORCE**  
`FORCE` キーワードにより、ビュー内の競合するエンジンダイアレクト情報が新しい定義で上書きされます。`FORCE` キーワードは、データカタログビューの更新後に、既存のエンジンダイアレクト間でビュー定義に競合が発生した場合に役立ちます。例えば、データカタログビューに Athena と Amazon Redshift の両方のダイアレクトがあり、更新後に、ビュー定義で Amazon Redshift と競合が発生したとします。この場合は、`FORCE` キーワードを使用して更新を完了させ、Amazon Redshift ダイアレクトを古いものとしてマークできます。古いとマークされたエンジンがビューをクエリすると、クエリは失敗します。エンジンは例外をスローして、古い結果を許可しません。これを修正するには、ビュー内の古いダイアレクトを更新します。

**ADD**  
データカタログビューに新しいエンジンダイアレクトを追加します。指定するエンジンは、データカタログビューに既に存在していない必要があります。

**UPDATE**  
データカタログビューに既に存在するエンジンダイアレクトを更新します。

**DROP**  
既存のエンジンダイアレクトをデータカタログビューから削除します。データカタログビューからエンジンを削除すると、削除されたエンジンからデータカタログビューをクエリできなくなります。ビュー内の他のエンジンダイアレクトは引き続きビューをクエリできます。

**DIALECT AS**  
エンジン固有の SQL クエリを導入します。

## 例
<a name="alter-view-dialect-syntax-examples"></a>

```
ALTER VIEW orders_by_date FORCE ADD DIALECT 
AS 
SELECT orderdate, sum(totalprice) AS price 
FROM orders 
GROUP BY orderdate
```

```
ALTER VIEW orders_by_date FORCE UPDATE DIALECT 
AS 
SELECT orderdate, sum(totalprice) AS price 
FROM orders 
GROUP BY orderdate
```

```
ALTER VIEW orders_by_date DROP DIALECT
```

# CREATE DATABASE
<a name="create-database"></a>

データベースを作成します。`DATABASE` と `SCHEMA` はどちらでも使用できます。どちらも同じ意味です。

**注記**  
データベースの作成、テーブルの作成、および Athena のテーブルに対する `SELECT` クエリの実行の例については、[はじめに](getting-started.md) を参照してください。

## 概要
<a name="synopsis"></a>

```
CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] database_name
  [COMMENT 'database_comment']
  [LOCATION 'S3_loc']
  [WITH DBPROPERTIES ('property_name' = 'property_value') [, ...]]
```

Athena のデータベース名の制限については、「[データベース、テーブル、列に名前を付ける](tables-databases-columns-names.md)」を参照してください。

## パラメータ
<a name="parameters"></a>

**[IF NOT EXISTS]**  
`database_name` という名前のデータベースが既に存在する場合、エラーメッセージを抑制します。

**[COMMENT database\$1comment]**  
`comment` という組み込みメタデータプロパティにメタデータ値を設定し、`database_comment` に値を指定します。AWS Glue では、`COMMENT` の内容がデータベースプロパティの `Description` フィールドに書き込まれます。

**[LOCATION S3\$1loc]**  
データベースファイルとメタストアがある場所を `S3_loc` として指定します。これは Amazon S3 の場所にする必要があります。

**[WITH DBPROPERTIES ('property\$1name' = 'property\$1value') [, ...]]**  
データベース定義のカスタムメタデータプロパティを指定します。

## 例
<a name="examples"></a>

```
CREATE DATABASE clickstreams;
```

```
CREATE DATABASE IF NOT EXISTS clickstreams
  COMMENT 'Site Foo clickstream data aggregates'
  LOCATION 's3://amzn-s3-demo-bucket/clickstreams/'
  WITH DBPROPERTIES ('creator'='Jane D.', 'Dept.'='Marketing analytics');
```

## データベースプロパティの表示
<a name="create-database-viewing-properties"></a>

`CREATE DATABASE` を使用して AWSDataCatalog で作成するデータベースのデータベースプロパティを表示するには、以下の例にあるように、AWS CLI コマンドの [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-database.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-database.html) を使用することができます。

```
aws glue get-database --name <your-database-name>
```

JSON 出力では、結果が以下のようになります。

```
{
    "Database": {
        "Name": "<your-database-name>",
        "Description": "<your-database-comment>",
        "LocationUri": "s3://amzn-s3-demo-bucket",
        "Parameters": {
            "<your-database-property-name>": "<your-database-property-value>"
        },
        "CreateTime": 1603383451.0,
        "CreateTableDefaultPermissions": [
            {
                "Principal": {
                    "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS"
                },
                "Permissions": [
                    "ALL"
                ]
            }
        ]
    }
}
```

AWS CLI の詳細については、[AWS Command Line Interface ユーザーガイド](https://docs.aws.amazon.com/cli/latest/userguide/)を参照してください。

# CREATE TABLE
<a name="create-table"></a>

指定した名前とパラメータでテーブルを作成します。

**注記**  
このページには、要約されたリファレンス情報が含まれています。Athena でのテーブルの作成と `CREATE TABLE` ステートメントの例に関する詳細については、「[Athena でテーブルを作成する](creating-tables.md)」を参照してください。データベースの作成、テーブルの作成、および Athena のテーブルに対する `SELECT` クエリの実行の例については、「[はじめに](getting-started.md)」を参照してください。

## 概要
<a name="synopsis"></a>

```
CREATE EXTERNAL TABLE [IF NOT EXISTS]
 [db_name.]table_name [(col_name data_type [COMMENT col_comment] [, ...] )]
 [COMMENT table_comment]
 [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
 [CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS]
 [ROW FORMAT row_format]
 [STORED AS file_format] 
 [WITH SERDEPROPERTIES (...)]
 [LOCATION 's3://amzn-s3-demo-bucket/[folder]/']
 [TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['encryption_option'='SSE_S3 | SSE_KMS | CSE_KMS',] ['kms_key'='aws_kms_key_arn',] ['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]
```

## パラメータ
<a name="parameters"></a>

**EXTERNAL**  
ユーザー指定の `LOCATION` で、テーブルが Amazon S3 に存在する基盤データに基づいていることを指定します。[Iceberg](querying-iceberg-creating-tables.md) テーブルの作成時を除いて、常に `EXTERNAL` キーワードが使用されます。Iceberg 以外のテーブルで、`EXTERNAL` キーワードを指定せずに `CREATE TABLE` を使用すると、Athena でエラーが発生します。外部テーブルを作成する場合、参照先のデータはデフォルト形式に準拠しているか、ユーザーが `ROW FORMAT`、`STORED AS`、および `WITH SERDEPROPERTIES` で指定する形式に準拠している必要があります。

**[IF NOT EXISTS**  
このパラメータは、同じ名前のテーブルが既に存在するかどうかを確認します。その場合、パラメータは `TRUE` を返し、Amazon Athena は `CREATE TABLE` アクションをキャンセルします。キャンセルは Athena がデータカタログを呼び出す前に行われるため、AWS CloudTrail イベントは発生しません。

**[db\$1name.]table\$1name**  
作成するテーブルの名前を指定します。オプションの `db_name` パラメータは、テーブルを作成する先のデータベースを指定します。この引数を省略すると、現在のデータベースが使用されます。テーブル名に数字を含める場合は、`table_name` を引用符で囲みます (例: `"table123"`)。`table_name` をアンダースコアで始める場合は、バックティックを使用します (例: ``_mytable``)。特殊文字 (アンダースコア以外) はサポートされていません。  
Athena のテーブル名では大文字と小文字が区別されませんが、Apache Spark を使用する場合、Spark ではテーブル名を小文字にする必要があります。Athena のテーブル名の制限については、「[データベース、テーブル、列に名前を付ける](tables-databases-columns-names.md)」を参照してください。

**[ ( col\$1name data\$1type [COMMENT col\$1comment] [, ...] ) ]**  
作成する各列の名前とデータ型を指定します。列名に特殊文字 (アンダースコア `(_)` を除く) を使用することはできません。`col_name` をアンダースコアで始める場合は、列名をバックティックで囲みます (例: ``_mycolumn``)。Athena の列名の制限については、「[データベース、テーブル、列に名前を付ける](tables-databases-columns-names.md)」を参照してください。  
`data_type` 値には次のいずれかを指定できます。  
+ `boolean` – 値は `true` もしくは `false` です。
+ `tinyint` – 2 の補数形式の 8 ビット符号付き整数で、最小値は -2^7、最大値は 2^7-1 です。
+ `smallint` – 2 の補数形式の 16 ビット符号付き整数で、最小値は -2^15、最大値は 2^15-1 です。
+ `int` – `CREATE TABLE` のようなデータ定義言語 (DDL) のクエリでは、整数を表すために `int` キーワードを使用します。他のクエリでは、`integer` キーワードを使用します。ここで `integer` は 2 の補数形式の 32 ビット符号付き値で表され、最小値は -2^31、最大値は 2^31-1 です。JDBC ドライバーでは、ビジネス分析アプリケーションとの互換性を確保するために `integer` が返されます。
+ `bigint` – 2 の補数形式の 64 ビット符号付き整数で、最小値は -2^63、最大値は 2^63-1 です。
+ `double` – 64 ビットの符号付き倍精度浮動小数点数です。これは、4.94065645841246544e-324d から 1.79769313486231570e\$1308d の範囲の正または負の値です。`double` は、IEEE Standard for Floating-Point Arithmetic (IEEE 754) に準拠しています。
+ `float` – 32 ビットの符号付き単精度浮動小数点数です。これは、1.40129846432481707e-45 から 3.40282346638528860e\$138 の範囲の正または負の値です。`float`は、IEEE Standard for Floating-Point Arithmetic (IEEE 754) に準拠しています。Presto の `real` に相当します。Athena では、`CREATE TABLE` のような DDL ステートメントで `float`、`SELECT CAST` のような SQL 関数で `real` を使用します。AWS Glue クローラーは `float` で値を返し、Athena は `real` 型と `float` 型を内部で変換します ([2018 年 5 月 6 日](release-notes.md#release-note-2018-06-05) リリースノートを参照)。
+ `decimal [ (precision, scale) ]`。ここで `precision` は桁の合計数であり、`scale` (オプション) は小数点以下の桁数です。デフォルトは 0 です。たとえば、`decimal(11,5)`、`decimal(15)` のタイプ定義を使用します。*precision* の最大値は 38 で、*scale* の最大値も 38 です。

  たとえばクエリ DDL 式で特定の小数値を含む行を選択する場合など、小数値をリテラルとして指定するには、`decimal` 型の定義を指定し、クエリ内で小数値をリテラル (一重引用符) としてリストします。例としては `decimal_value = decimal '0.12'` のようになります。
+ `char` – 固定長の文字データです。`char(10)` のように、1 から 255 の長さを指定します。詳細については、「[CHAR Hive データ型](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-char)」を参照してください。
+ `varchar` – 可変長の文字データです。`varchar(10)` のように、1 から 65535 の長さを指定します。詳細については、「[VARCHAR Hive データ型](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-varchar)」を参照してください。
+ `string` – 一重引用符または二重引用符で囲まれた文字列リテラルです。
**注記**  
文字列以外のデータ型を Athena の `string` にキャストすることはできません。その代わりに `varchar` にキャストします。
+ `binary` – (Parquet のデータ用)
+ `date` – `YYYY-MM-DD` などの ISO 形式の日付です。例えば、`date '2008-09-15'`。例外として、1970 年 1 月 1 日以降の経過日数を使用する OpenCSVSerDe があります。詳細については、「[CSV を処理するための Open CSV SerDe](csv-serde.md)」を参照してください。
+ `timestamp` – 分解能をミリ秒単位まで指定可能な、[https://docs.oracle.com/javase/8/docs/api/java/sql/Timestamp.html](https://docs.oracle.com/javase/8/docs/api/java/sql/Timestamp.html) 互換形式での日付と時刻のインスタント (例、`yyyy-MM-dd HH:mm:ss[.f...]`) です。例えば、`timestamp '2008-09-15 03:04:05.324'`。例外として、UNIX の数値形式 (`1579059880000` など) の `TIMESTAMP` データを使用する OpenCSVSerDe があります。詳細については、「[CSV を処理するための Open CSV SerDe](csv-serde.md)」を参照してください。
+ `array` < data\$1type >
+ `map` < primitive\$1type, data\$1type >
+ `struct`< col\$1name : data\$1type [comment col\$1comment] [, ...]>

**[COMMENT table\$1comment]**  
`comment` テーブルプロパティを作成し、指定した `table_comment` を追加します。

**[PARTITIONED BY (col\$1name data\$1type [ COMMENT col\$1comment ], ... ) ]**  
`col_name`、`data_type` および `col_comment` が指定された 1 つ以上の列を持つ、パーティションされたテーブルを作成します。テーブルは、個別の列名と値の組み合わせで構成されるパーティションを 1 つ以上持つことができます。指定した組み合わせごとに別個のデータディレクトリが作成されます。これにより、クエリパフォーマンスが向上する場合があります。パーティション化された列はテーブルデータ内には存在しません。テーブル列と同じ `col_name` の値を使用する場合は、エラーになります。詳細については、「[データのパーティション](partitions.md)」を参照してください。  
パーティションされたテーブルを作成したら、[MSCK REPAIR TABLE](msck-repair-table.md) 句で構成されるクエリを続けて実行し、パーティションメタデータ (`MSCK REPAIR TABLE cloudfront_logs;` など) を更新します。Hive と互換性のないパーティションの場合、[ALTER TABLE ADD PARTITION](alter-table-add-partition.md) を使用してパーティションをロードすることで、データをクエリできるようにします。

**[CLUSTERED BY (col\$1name, col\$1name, ...) INTO num\$1buckets BUCKETS]**  
パーティションの有無にかかわらず、指定された `col_name` 列のデータを*バケット*と呼ばれるデータサブセットに分割します。`num_buckets` パラメータは、作成するバケットの数を指定します。バケット化は、大規模なデータセットでの一部のクエリのパフォーマンスを向上させることができます。

**[ROW FORMAT row\$1format]**  
テーブルの行形式と基になるソースデータ (該当する場合) を指定します。`row_format` として、`DELIMITED` 句で 1 つ以上の区切り記号を指定できます。または、以下に説明するように、`SERDE` 句を使用できます。`ROW FORMAT` を省略するか、`ROW FORMAT DELIMITED` を指定すると、ネイティブ SerDe が使用されます。  
+ [DELIMITED FIELDS TERMINATED BY char [ESCAPED BY char]]
+ [DELIMITED COLLECTION ITEMS TERMINATED BY char]
+ [MAP KEYS TERMINATED BY char]
+ [LINES TERMINATED BY char]
+ [NULL DEFINED AS char]

  Hive 0.13 で、STORED AS ファイル形式が `TEXTFILE` である場合にのみ使用できます。
 **--または--**   
+ SERDE 'serde\$1name' [WITH SERDEPROPERTIES ("property\$1name" = "property\$1value", "property\$1name" = "property\$1value" [, ...] )]

  `serde_name` は、使用する SerDe を示します。`WITH SERDEPROPERTIES` 句を使用すると、SerDe で許可される 1 つ以上のカスタムプロパティを指定できます。

**[STORED AS file\$1format]**  
テーブルデータのファイル形式を指定します。省略すると、デフォルトの `TEXTFILE` が使用されます。`file_format` のオプションは以下のとおりです。  
+ SEQUENCEFILE
+ TEXTFILE
+ RCFILE
+ ORC
+ PARQUET
+ AVRO
+ ION
+ INPUTFORMAT input\$1format\$1classname OUTPUTFORMAT output\$1format\$1classname

**[LOCATION 's3://amzn-s3-demo-bucket/[folder]/']**  
テーブルが作成される Amazon S3 内の基盤データの場所を指定します。ロケーションパスは、バケット名、またはバケット名と 1 つ以上のフォルダである必要があります。パーティションを使用する場合は、パーティションされたデータのルートを指定します。テーブルのロケーションの詳細については、「[Amazon S3 でテーブルの場所を指定する](tables-location-format.md)」を参照してください。データ形式と許可については、「[Amazon S3 に関する考慮事項](creating-tables.md#s3-considerations)」を参照してください。  
フォルダやバケットの後にはスラッシュを使用します。ファイル名や glob 文字を使用しないでください。  
 ** を使用します**。  
`s3://amzn-s3-demo-bucket/`  
`s3://amzn-s3-demo-bucket/folder/`  
`s3://amzn-s3-demo-bucket/folder/anotherfolder/`  
 **使用不可:**  
`s3://amzn-s3-demo-bucket`  
`s3://amzn-s3-demo-bucket/*`  
`s3://amzn-s3-demo-bucket/mydatafile.dat`

**[TBLPROPERTIES ( ['has\$1encrypted\$1data'='true \$1 false',] ['encryption\$1option'='SSE\$1S3 \$1 SSE\$1KMS \$1 CSE\$1KMS',] ['kms\$1key'='aws\$1kms\$1key\$1arn',] ['classification'='classification\$1value',] property\$1name=property\$1value [, ...] ) ]**  
定義済みのテーブルプロパティ (`"comment"` など) に加えて、テーブル定義のカスタムメタデータとしてキーと値のペアを指定します。  
**has\$1encrypted\$1data** — Athena には、`has_encrypted_data` という組み込みプロパティがあります。`LOCATION` により指定された基盤となるデータセットの CSE-KMS 暗号化を指定するには、このプロパティを `true` に設定します。省略するか、そのワークグループの設定がクライアント側の設定を上書きしない場合、`false` が設定されます。省略するか、`false` に設定して基になるデータを暗号化すると、クエリはエラーになります。詳細については、「[保管中の暗号化](encryption.md)」を参照してください。  
**encryption\$1option** – `LOCATION` によって指定された基盤となるデータセットで使用される最高レベルの暗号化を示すには、このプロパティを `SSE_S3`、`SSE_KMS`、または `CSE_KMS` のいずれかに設定します。詳細については、「[保管中の暗号化](encryption.md)」を参照してください。  
**kms\$1key** – このプロパティを、テーブルデータファイルの暗号化と復号に使用される AWS KMS キー ARN に設定します。Athena はこのキーを使用して、`SSE_KMS` または `CSE_KMS` 暗号化を使用して書き込むときにテーブルデータファイルを暗号化し、CSE-KMS 暗号化テーブルデータファイルを復号します。`encryption_option` が `SSE_KMS` または `CSE_KMS` に設定されている場合、このパラメータは必須ではありません。詳細については、「[保管中の暗号化](encryption.md)」を参照してください。  
**分類** — CloudTrail コンソールで Athena 用に作成されたテーブルは、`classification` プロパティの値として `cloudtrail` を追加されます。ETL ジョブを実行する場合、AWS Glue では、テーブルの作成時に `classification` プロパティを設定し、AWS Glue のデータ型を `csv`、`parquet`、`orc`、`avro`、`json` のいずれかに指定する必要があります。例えば、`'classification'='csv'`。このプロパティを指定しないと、ETL ジョブは失敗します。AWS Glue コンソール、API、または CLI を使用して後で指定できます。詳細については、「[ETL ジョブのテーブルを作成する](schema-classifier.md)」と、「AWS Glue デベロッパーガイド」の「[AWS Glue でジョブを作成する](https://docs.aws.amazon.com/glue/latest/dg/author-job.html)」を参照してください。  
**compression\$1level** — `compression_level` プロパティは使用する圧縮レベルを指定します。このプロパティは、ZSTD 圧縮にのみ適用されます。有効な値は 1 から 22 です。デフォルト値は 3 です。詳細については、「[ZSTD 圧縮レベルを使用する](compression-support-zstd-levels.md)」を参照してください。  
その他のテーブルプロパティの詳細については、「[ALTER TABLE SET TBLPROPERTIES](alter-table-set-tblproperties.md)」を参照してください。

## 例
<a name="create-table-examples"></a>

次のサンプル `CREATE TABLE` ステートメントは、Amazon S3 に保存されているタブ区切りの惑星データに基づいてテーブルを作成します。

```
CREATE EXTERNAL TABLE planet_data (
  planet_name string,
  order_from_sun int,
  au_to_sun float,
  mass float,
  gravity_earth float,
  orbit_years float,
  day_length float
  )
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION 's3://amzn-s3-demo-bucket/tsv/'
```

以下の点に注意してください。
+ `ROW FORMAT DELIMITED` 句は、データが特定の文字で区切られていることを示します。
+ `FIELDS TERMINATED BY '\t'` 句は、TSV データ内のフィールドがタブ文字 ('\$1t') で区切られることを指定します。
+ `STORED AS TEXTFILE` 句は、データがプレーンテキストファイルとして Amazon S3 に保存されることを示します。

データをクエリするには、次のようなシンプルな `SELECT` ステートメントを使用できます。

```
SELECT * FROM planet_data
```

この例を使用して Athena で独自の TSV テーブルを作成するには、テーブル名と列名を独自のテーブルと列の名前とデータ型に置き換えてから、TSV ファイルが保存されている Amazon S3 パスをポイントするように `LOCATION` 句を更新します。

テーブル作成の詳細については、「[Athena でテーブルを作成する](creating-tables.md)」を参照してください。

# CREATE TABLE AS
<a name="create-table-as"></a>

[SELECT](select.md) クエリの結果が入力された新しいテーブルを作成します。空のテーブルを作成するには、[CREATE TABLE](create-table.md) を使用します。`CREATE TABLE AS` は `CREATE TABLE` DDL ステートメントと `SELECT` DML ステートメントを組み合わせているため、技術的には DDL と DML の両方を含んでいます。ここでは `CREATE TABLE AS` が他の DDL ステートメントとまとめられているが、Athena の CTAS クエリは、Service Quotas の目的で DML として扱われることに注意してください。Athena の Service Quotasの詳細については、「[サービスクォータ](service-limits.md)」を参照してください。

**注記**  
CTAS ステートメントの場合、予想されるバケット所有者の設定は、Amazon S3 内の送信先テーブルの場所には適用されません。予期されるバケット所有者の設定は、Athena クエリの結果の出力先として指定した Amazon S3 内の場所にのみ適用されます。詳細については、「[Athena コンソールを使用してクエリ結果の場所を指定する](query-results-specify-location-console.md)」を参照してください。

このリファレンストピックの対象外である `CREATE TABLE AS` に関する追加情報については、「[クエリ結果からテーブルを作成する (CTAS)](ctas.md)」を参照してください。

**Topics**
+ [概要](#synopsis)
+ [CTAS テーブルのプロパティ](#ctas-table-properties)
+ [例](#ctas-table-examples)

## 概要
<a name="synopsis"></a>

```
CREATE TABLE table_name
[ WITH ( property_name = expression [, ...] ) ]
AS query
[ WITH [ NO ] DATA ]
```

コードの説明は以下のとおりです。

**WITH ( property\$1name = expression [, ...] )**  
オプションの CTAS テーブルのプロパティのリスト。一部のプロパティはデータストレージ形式に固有です。「[CTAS テーブルのプロパティ](#ctas-table-properties)」を参照してください。

**query**  
新しいテーブルの作成に使用される [SELECT](select.md) クエリです。  
パーティションがあるクエリを作成する予定がある場合は、`SELECT` ステートメントで列のリストの最後に、パーティションされた列の名前を指定します。

**[ WITH [ NO ] DATA ]**  
`WITH NO DATA` が指定されている場合、元のテーブルと同じスキーマを持つ新しい空のテーブルが作成されます。

**注記**  
クエリの結果出力に列ヘッダーを含めるには、CTAS クエリの代わりに単純な `SELECT` クエリを実行します。クエリ結果の場所から結果を取得するか、Athena コンソールを使用して結果を直接ダウンロードすることができます。詳細については、「[クエリ結果と最近のクエリを操作する](querying.md)」を参照してください。

## CTAS テーブルのプロパティ
<a name="ctas-table-properties"></a>

Athena の各 CTAS テーブルには、`WITH (property_name = expression [, ...] )` を使用して指定するオプションの CTAS テーブルプロパティのリストがあります。これらのパラメータの使用方法については、「[CTAS クエリの例](ctas-examples.md)」を参照してください。

** `WITH (property_name = expression [, ...], )` **    
 `table_type = ['HIVE', 'ICEBERG']`   
オプション。デフォルト: `HIVE`。生成されるテーブルのテーブルタイプを指定します  
例：  

```
WITH (table_type ='ICEBERG')
```  
 `external_location = [location]`   
Iceberg テーブルは外部ではないため、このプロパティは Iceberg テーブルには適用されません。CTAS ステートメントで Iceberg テーブルのルートロケーションを定義するには、このセクションで後述する `location` プロパティを使用します。
オプション。Athena が CTAS クエリを Amazon S3 に保存する場所です。  
例：  

```
 WITH (external_location ='s3://amzn-s3-demo-bucket/tables/parquet_table/')
```
Athena は、クエリ結果に同じパスを 2 回使用しません。場所を手動で指定する場合は、指定する Amazon S3 の場所にデータがないことを確認してください。Athena がデータの削除を試みることはありません。再度同じ場所を使用する場合は、手動でデータを削除します。そうしないと、CTAS クエリは失敗します。  
[クエリ結果の場所を強制する](workgroups-settings-override.md)ワークグループで `external_location` を指定する CTAS クエリを実行すると、クエリはエラーメッセージを伴って敗します。ワークグループに対して指定されたクエリ結果の場所を確認するには、[ワークグループの詳細を参照してください](viewing-details-workgroups.md)。  
ワークグループがクエリ結果の場所に関するクライアント側の設定を上書きする場合、Athena は以下の場所にテーブルを作成します。  

```
s3://amzn-s3-demo-bucket/tables/query-id/
```
`external_location` プロパティを使用して場所を指定せず、ワークグループがクライアント側の設定を上書きしない場合、Athena はクエリ結果の場所に[クライアント側の設定](query-results-specify-location-console.md)を使用して、以下の場所にテーブルを作成します。  

```
s3://amzn-s3-demo-bucket/Unsaved-or-query-name/year/month/date/tables/query-id/
```  
 `is_external = [boolean]`   
オプション。テーブルが外部テーブルかどうかを示します。デフォルトは true です。Iceberg テーブルの場合、これを false に設定する必要があります。  
例：  

```
WITH (is_external = false)
```  
 `location = [location]`   
Iceberg テーブルには必須です。クエリ結果から作成される Iceberg テーブルのルート位置を指定します。  
例：  

```
WITH (location ='s3://amzn-s3-demo-bucket/tables/iceberg_table/')
```  
 `field_delimiter = [delimiter]`   
オプションであり、テキストベースのデータストレージ形式に固有のパラメータ。CSV と TSV のファイル、およびテキストファイルのための単一文字のフィールド区切り文字で、例えば、 。`WITH (field_delimiter = ',')`現在、CTAS クエリは複数文字のフィールド区切り文字をサポートしてません。フィールド区切り文字を指定しなかった場合、デフォルトで `\001` が使用されます。  
 `format = [storage_format]`   
CTAS クエリ結果のストレージ形式 (例: `ORC`、`PARQUET`、`AVRO`、`JSON`、`ION`、または `TEXTFILE`)。Iceberg テーブルで使用できる形式は `ORC`、`PARQUET`、および `AVRO` です。省略した場合は、デフォルトで `PARQUET` が使用されます。このパラメータの名前である `format` は小文字で記述する必要があります。そうしないと、CTAS クエリは失敗します。  
例：  

```
WITH (format = 'PARQUET')
```  
 `bucketed_by = ARRAY[ column_name[,…], bucket_count = [int] ]`   
このプロパティは Iceberg テーブルには適用されません。Iceberg テーブルの場合は、バケット変換によるパーティショニングを使用してください。
データの配置先となるバケットの配列リスト。省略された場合、Athena はこのクエリでデータをバケット化しません。  
 `bucket_count = [int]`   
このプロパティは Iceberg テーブルには適用されません。Iceberg テーブルの場合は、バケット変換によるパーティショニングを使用してください。
データの配置先となるバケットの数。省略された場合、Athena はデータをバケット化しません。例：  

```
CREATE TABLE bucketed_table WITH (
  bucketed_by = ARRAY[column_name], 
  bucket_count = 30, format = 'PARQUET', 
  external_location ='s3://amzn-s3-demo-bucket/tables/parquet_table/'
) AS 
SELECT 
  * 
FROM 
  table_name
```  
 `partitioned_by = ARRAY[ col_name[,…] ]`   
このプロパティは Iceberg テーブルには適用されません。Iceberg テーブルにパーティション変換を使用するには、このセクションで後述する `partitioning` プロパティを使用してください。
オプション。CTAS テーブルをパーティションする列の配列リスト。パーティションされた列の名前は、`SELECT` ステートメントで列のリストの最後に記述します。  
 `partitioning = ARRAY[partition_transform, ...]`   
オプション。作成する Iceberg テーブルのパーティショニングを指定します。Iceberg は、さまざまなパーティション変換およびパーティションの進化に対応しています。パーティション変換を次の表に要約します。    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/create-table-as.html)
例：  

```
 WITH (partitioning = ARRAY['month(order_date)', 
                            'bucket(account_number, 10)', 
                            'country']))
```  
 `optimize_rewrite_min_data_file_size_bytes = [long]`   
オプション。データ最適化固有の設定。指定した値より小さいファイルは、最適化のために含まれます。デフォルトは `write_target_data_file_size_bytes` の 0.75 倍の値です。このプロパティは Iceberg テーブルにのみ適用されます。詳細については、「[Iceberg テーブルを最適化する](querying-iceberg-data-optimization.md)」を参照してください。  
例：  

```
WITH (optimize_rewrite_min_data_file_size_bytes = 402653184)
```  
 `optimize_rewrite_max_data_file_size_bytes = [long]`   
オプション。データ最適化固有の設定。指定した値より大きいファイルは、最適化のために含まれます。デフォルトは `write_target_data_file_size_bytes` の 1.8 倍の値です。このプロパティは Iceberg テーブルにのみ適用されます。詳細については、「[Iceberg テーブルを最適化する](querying-iceberg-data-optimization.md)」を参照してください。  
例：  

```
WITH (optimize_rewrite_max_data_file_size_bytes = 966367641)
```  
 `optimize_rewrite_data_file_threshold = [int]`   
オプション。データ最適化固有の設定。最適化が必要なデータファイルの数が指定されたしきい値より少ない場合、データファイルは書き換えられません。これにより、蓄積するデータファイルの数を増やしてターゲットサイズに近いファイルを生成し、不要な計算をスキップしてコストを削減できます。デフォルトは 5 です。このプロパティは Iceberg テーブルにのみ適用されます。詳細については、「[Iceberg テーブルを最適化する](querying-iceberg-data-optimization.md)」を参照してください。  
例：  

```
WITH (optimize_rewrite_data_file_threshold = 5)
```  
 `optimize_rewrite_delete_file_threshold = [int]`   
オプション。データ最適化固有の設定。データファイルに関連付けられた削除ファイルの数がしきい値より少ない場合、データファイルは書き換えられません。これにより、データファイルごとに蓄積する削除ファイルの数を増やしてコストを削減できます。デフォルトは 2 です。このプロパティは Iceberg テーブルにのみ適用されます。詳細については、「[Iceberg テーブルを最適化する](querying-iceberg-data-optimization.md)」を参照してください。  
例：  

```
WITH (optimize_rewrite_delete_file_threshold = 2)
```  
 `vacuum_min_snapshots_to_keep = [int]`   
オプション。バキューム固有の設定。保持する最新のスナップショットの最小数。デフォルト は 1 です。このプロパティは Iceberg テーブルにのみ適用されます。詳細については、「[VACUUM](vacuum-statement.md)」を参照してください。  
`vacuum_min_snapshots_to_keep` プロパティには、Athena エンジンバージョン 3 が必要です。
例：  

```
WITH (vacuum_min_snapshots_to_keep = 1)
```  
 `vacuum_max_snapshot_age_seconds = [long]`   
オプション。バキューム固有の設定。保持するスナップショットの経過時間を表す秒単位の期間。デフォルトは 432,000 (5 日) です。このプロパティは Iceberg テーブルにのみ適用されます。詳細については、「[VACUUM](vacuum-statement.md)」を参照してください。  
`vacuum_max_snapshot_age_seconds` プロパティには、Athena エンジンバージョン 3 が必要です。
例：  

```
WITH (vacuum_max_snapshot_age_seconds = 432000)
```  
 `write_compression = [compression_format]`   
圧縮を指定できるストレージ形式に使用するための圧縮タイプ。`compression_format` は、テーブルへのデータの書き込み時に使用される圧縮を指定します。`TEXTFILE`、`JSON`、`PARQUET`、および `ORC` のファイル形式に対して圧縮を指定できます。  
例えば、`format` プロパティにおいてストレージ形式として `PARQUET` が指定されている場合、`write_compression` の値で Parquet での圧縮形式を指定します。この場合、`write_compression` の値を指定することは、`parquet_compression` の値を指定することと同等です。  
同様に、`format` プロパティにおいてストレージ形式として `ORC` が指定されている場合には、`write_compression` の値で ORC の圧縮形式を指定します。この場合、`write_compression` の値を指定することは、`orc_compression` の値を指定することと同等です。  
同じ CTAS クエリで、テーブルプロパティに複数の圧縮形式を指定することはできません。例えば、同一のクエリ内で、`write_compression` と `parquet_compression` の両方を指定することはできません。同様なことが `write_compression` と `orc_compression` にも当てはまります。各ファイル形式でサポートされている圧縮タイプの詳細については、「[Athena で圧縮を使用する](compression-formats.md)」を参照してください。  
 `orc_compression = [compression_format]`   
テーブルへの `ORC` データ書き込み時に、`ORC` ファイル形式に対して使用される圧縮タイプ 例えば、`WITH (orc_compression = 'ZLIB')` と指定します。`ORC` ファイル (`ORC` Postscript を除く) 内のチャンクは、指定された圧縮を使用して圧縮されます。この指定を省略した場合、`ORC` に対してはデフォルトで ZLIB 圧縮が使用されます。  
整合性を保つために、`orc_compression` の代わりに `write_compression` プロパティを使用することをお勧めします。`format` プロパティを使用して、ストレージ形式を `ORC` に指定した上で、`write_compression` プロパティにより、圧縮形式を `ORC` が使用するものに指定します。  
 `parquet_compression = [compression_format]`   
Parquet データのテーブルへの書き込み時に、Parquet ファイル形式に対して使用される圧縮タイプ。例えば、`WITH (parquet_compression = 'SNAPPY')` と指定します。この圧縮は Parquet ファイル内の列チャンクに適用されます。この指定を省略した場合、Parquet に対してはデフォルトで GZIP 圧縮が使用されます。  
整合性を保つために、`parquet_compression` の代わりに `write_compression` プロパティを使用することをお勧めします。`format` プロパティを使用して、ストレージ形式を `PARQUET` に指定した上で、`write_compression` プロパティにより、圧縮形式を `PARQUET` が使用するものに指定します。  
 `compression_level = [compression_level]`   
使用する圧縮レベル。このプロパティは、ZSTD 圧縮にのみ適用されます。有効な値は 1 から 22 です。デフォルト値は 3 です。詳細については、「[ZSTD 圧縮レベルを使用する](compression-support-zstd-levels.md)」を参照してください。

## 例
<a name="ctas-table-examples"></a>

CTAS クエリの例については、次のリソースを参照してください。
+  [CTAS クエリの例](ctas-examples.md) 
+  [ETL およびデータ分析での CTAS および INSERT INTO を使用する](ctas-insert-into-etl.md) 
+  [コストを削減してパフォーマンスを向上させるために Amazon Athena で CTAS ステートメントを使用する](https://aws.amazon.com/blogs/big-data/using-ctas-statements-with-amazon-athena-to-reduce-cost-and-improve-performance/) 
+  [CTAS および INSERT INTO を使用して 100 パーティションの制限を回避する](ctas-insert-into.md) 

# CREATE VIEW および CREATE PROTECTED MULTI DIALECT VIEW
<a name="create-view"></a>

ビューは、この先のクエリで参照できる論理的なテーブルです。ビューにはデータは一切含まれず、データを書き込むこともできません。代わりに、ビューで指定するクエリは、別のクエリでそのビューを参照するたびに実行されます。
+ `CREATE VIEW` は、指定された `SELECT` クエリから Athena ビューを作成します。Athena ビューは Athena 内で機能します。Athena ビューの詳細については、「[ビューを使用する](views.md)」を参照してください。
+ `CREATE PROTECTED MULTI DIALECT VIEW` は、AWS Glue Data Catalog に AWS Glue Data Catalog ビューを作成します。AWS Glue Data Catalog ビューは、Amazon Athena や Amazon Redshift などの AWS のサービス 全体で単一の共通ビューを提供します。AWS Glue Data Catalog ビューの詳細については、「[Athena でデータカタログビューを使用する](views-glue.md)」を参照してください。

## CREATE VIEW
<a name="create-view-ate"></a>

Athena 内で使用するビューを作成します。

### 概要
<a name="synopsis"></a>

```
CREATE [ OR REPLACE ] VIEW view_name AS query
```

オプションの `OR REPLACE` 句は、既存のビューを更新して置き換えます。詳細については、「[ビューを作成する](views-console.md#creating-views)」を参照してください。

### 例
<a name="examples"></a>

テーブル `orders` から `test` ビューを作成するには、次のようなクエリを使用します。

```
CREATE VIEW test AS
SELECT 
orderkey, 
orderstatus, 
totalprice / 2 AS half
FROM orders;
```

テーブル `orders` から `orders_by_date` ビューを作成するには、次のクエリを使用します。

```
CREATE VIEW orders_by_date AS
SELECT orderdate, sum(totalprice) AS price
FROM orders
GROUP BY orderdate;
```

既存のビューを更新するには、次のような例を使用します。

```
CREATE OR REPLACE VIEW test AS
SELECT orderkey, orderstatus, totalprice / 4 AS quarter
FROM orders;
```

 Athena ビューの使用の詳細については、「[ビューを使用する](views.md)」を参照してください。

## CREATE PROTECTED MULTI DIALECT VIEW
<a name="create-protected-multi-dialect-view"></a>

AWS Glue Data Catalog で AWS Glue Data Catalog ビューを作成します。データカタログビューは、Athena と Amazon Redshift や Amazon EMR のような他の SQL エンジン間で機能する単一のビュースキーマです。

### 構文
<a name="create-protected-multi-dialect-view-syntax"></a>

```
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW view_name 
SECURITY DEFINER 
[ SHOW VIEW JSON ]
AS query
```

**OR REPLACE**  
(オプション) 既存のビューを置き換えて更新します。データカタログビューに他のエンジンの SQL ダイアレクトが含まれている場合、そのビューを置き換えることはできません。呼び出し側のエンジンの SQL ダイアレクトがビュー内に存在する場合は、そのビューを置き換えることができます。

**PROTECTED**  
キーワードが必須です。ビューをデータ漏洩から保護するように指定します。データカタログビューは `PROTECTED` ビューとしてのみ作成できます。

**MULTI DIALECT**  
ビューがさまざまなクエリエンジンの SQL ダイアレクトをサポートし、それらのエンジンで読み取れるように指定します。

**SECURITY DEFINER**  
このビューに対して definer セマンティクスが有効であることを指定します。definer セマンティクスとは、基礎となるテーブルに対する有効な読み取り権限が、実際の読み取りを実行するプリンシパルではなく、ビューを定義したプリンシパルまたはロールに属することを意味します。

**SHOW VIEW JSON**  
(オプション) 実際にビューを作成せずに、データカタログビュー仕様の JSON を返します。この「ドライラン」オプションは、ビューの SQL を検証し、AWS Glue が使用するテーブルメタデータを返す場合に便利です。

### 例
<a name="create-protected-multi-dialect-view-syntax-example"></a>

次の例では、`orders` テーブルに対するクエリに基づいて `orders_by_date` データカタログビューを作成します。

```
CREATE PROTECTED MULTI DIALECT VIEW orders_by_date 
SECURITY DEFINER 
AS 
SELECT orderdate, sum(totalprice) AS price 
FROM orders 
WHERE order_city = 'SEATTLE' 
GROUP BY orderdate
```

AWS Glue Data Catalog ビューの使用の詳細については、「[Athena でデータカタログビューを使用する](views-glue.md)」を参照してください。

# DESCRIBE
<a name="describe-table"></a>

指定したテーブルの 1 つ以上の列 (パーティション列を含む) を表示します。このコマンドは、複雑な列の属性を調べるのに便利です。

## 概要
<a name="synopsis"></a>

```
DESCRIBE [EXTENDED | FORMATTED] [db_name.]table_name [PARTITION partition_spec] [col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )]
```

**重要**  
このステートメントの構文は `DESCRIBE table_name` であり、`DESCRIBE TABLE table_name` ではありません。後者の構文を使用すると、エラーメッセージ FAILED: SemanticException [Error 10001]: Table not found table が表示されます。

## パラメータ
<a name="parameters"></a>

**[EXTENDED \$1 FORMATTED]**  
出力の形式を判断します。これらのパラメータを省略すると、列名と対応するデータ型 (パーティション列を含む) が表形式で表示されます。`FORMATTED` を指定すると、列名とデータ型が表形式で表示されるだけでなく、詳細なテーブルおよびストレージ情報も表示されます。`EXTENDED` は、列およびデータ型の情報を表形式で表示し、Thrift シリアル化形式でテーブルの詳細なメタデータを示します。この形式は読みにくいですが、主としてデバッグの際に役立ちます。

**[PARTITION partition\$1spec]**  
含まれている場合は、`partition_spec` で指定されたパーティションのメタデータが一覧表示されます。`partition_spec` は `(partition_column = partition_col_value, partition_column = partition_col_value, ...)` の形式です。

**[col\$1name ( [.field\$1name] \$1 [.'\$1elem\$1'] \$1 [.'\$1key\$1'] \$1 [.'\$1value\$1'] )\$1 ]**  
確認する列と属性を指定します。構造体の要素には `.field_name`、配列要素には `'$elem$'`、マップキーには `'$key$'`、およびマップ値には `'$value$'` を指定できます。これを再帰的に指定することで、複雑な列を詳しく調査できます。

### 例
<a name="examples"></a>

```
DESCRIBE orders
```

```
DESCRIBE FORMATTED mydatabase.mytable PARTITION (part_col = 100) columnA;
```

次のクエリおよび出力では、Amazon EMR サンプルデータに基づいた `impressions` テーブルの列およびデータ型の情報が表示されています。

```
DESCRIBE impressions
```

```
requestbegintime          string                                         from deserializer   
adid                      string                                         from deserializer   
impressionid              string                                         from deserializer   
referrer                  string                                         from deserializer   
useragent                 string                                         from deserializer   
usercookie                string                                         from deserializer   
ip                        string                                         from deserializer   
number                    string                                         from deserializer   
processid                 string                                         from deserializer   
browsercokie              string                                         from deserializer   
requestendtime            string                                         from deserializer   
timers                    struct<modellookup:string,requesttime:string>  from deserializer   
threadid                  string                                         from deserializer   
hostname                  string                                         from deserializer   
sessionid                 string                                         from deserializer   
dt                        string

# Partition Information
# col_name                data_type                 comment             

dt                        string
```

次のクエリおよび出力の例では、`FORMATTED` オプションが使用された場合の同じテーブルの結果が表示されています。

```
DESCRIBE FORMATTED impressions
```

```
requestbegintime          string                                         from deserializer
adid                      string                                         from deserializer
impressionid              string                                         from deserializer
referrer                  string                                         from deserializer
useragent                 string                                         from deserializer
usercookie                string                                         from deserializer
ip                        string                                         from deserializer
number                    string                                         from deserializer
processid                 string                                         from deserializer
browsercokie              string                                         from deserializer
requestendtime            string                                         from deserializer
timers                    struct<modellookup:string,requesttime:string>  from deserializer
threadid                  string                                         from deserializer
hostname                  string                                         from deserializer
sessionid                 string                                         from deserializer
dt                        string

# Partition Information
# col_name                data_type                 comment

dt                        string

# Detailed Table Information
Database:                 sampledb
Owner:                    hadoop
CreateTime:               Thu Apr 23 02:55:21 UTC 2020
LastAccessTime:           UNKNOWN
Protect Mode:             None
Retention:                0
Location:                 s3://us-east-1.elasticmapreduce/samples/hive-ads/tables/impressions
Table Type:               EXTERNAL_TABLE
Table Parameters:
        EXTERNAL                  TRUE
        transient_lastDdlTime     1587610521

# Storage Information
SerDe Library:                         org.openx.data.jsonserde.JsonSerDe
InputFormat:                           org.apache.hadoop.mapred.TextInputFormat
OutputFormat:                          org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat
Compressed:                            No
Num Buckets:                           -1
Bucket Columns:                        []
Sort Columns:                          []
Storage Desc Params:
        paths                                  requestbegintime, adid, impressionid, referrer, useragent, usercookie, ip
        serialization.format                   1
```

次のクエリおよび出力の例では、`EXTENDED` オプションが使用された場合の同じテーブルの結果が表示されています。詳細なテーブル情報は 1 行で出力されますが、ここでは読みやすくするためにフォーマットされています。

```
DESCRIBE EXTENDED impressions
```

```
requestbegintime          string                                         from deserializer
adid                      string                                         from deserializer
impressionid              string                                         from deserializer
referrer                  string                                         from deserializer
useragent                 string                                         from deserializer
usercookie                string                                         from deserializer
ip                        string                                         from deserializer
number                    string                                         from deserializer
processid                 string                                         from deserializer
browsercokie              string                                         from deserializer
requestendtime            string                                         from deserializer
timers                    struct<modellookup:string,requesttime:string>  from deserializer
threadid                  string                                         from deserializer
hostname                  string                                         from deserializer
sessionid                 string                                         from deserializer
dt                        string

# Partition Information
# col_name                data_type                 comment

dt                        string

Detailed Table Information       Table(tableName:impressions, dbName:sampledb, owner:hadoop, createTime:1587610521, 
lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:requestbegintime, type:string, comment:null), 
FieldSchema(name:adid, type:string, comment:null), FieldSchema(name:impressionid, type:string, comment:null), 
FieldSchema(name:referrer, type:string, comment:null), FieldSchema(name:useragent, type:string, comment:null), 
FieldSchema(name:usercookie, type:string, comment:null), FieldSchema(name:ip, type:string, comment:null), 
FieldSchema(name:number, type:string, comment:null), FieldSchema(name:processid, type:string, comment:null), 
FieldSchema(name:browsercokie, type:string, comment:null), FieldSchema(name:requestendtime, type:string, comment:null), 
FieldSchema(name:timers, type:struct<modellookup:string,requesttime:string>, comment:null), FieldSchema(name:threadid, 
type:string, comment:null), FieldSchema(name:hostname, type:string, comment:null), FieldSchema(name:sessionid, 
type:string, comment:null)], location:s3://us-east-1.elasticmapreduce/samples/hive-ads/tables/impressions, 
inputFormat:org.apache.hadoop.mapred.TextInputFormat, 
outputFormat:org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, 
serdeInfo:SerDeInfo(name:null, serializationLib:org.openx.data.jsonserde.JsonSerDe, parameters:{serialization.format=1, 
paths=requestbegintime, adid, impressionid, referrer, useragent, usercookie, ip}), bucketCols:[], sortCols:[], parameters:{}, 
skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), 
storedAsSubDirectories:false), partitionKeys:[FieldSchema(name:dt, type:string, comment:null)], 
parameters:{EXTERNAL=TRUE, transient_lastDdlTime=1587610521}, viewOriginalText:null, viewExpandedText:null, 
tableType:EXTERNAL_TABLE)
```

# DESCRIBE VIEW
<a name="describe-view"></a>

指定された Athena または AWS Glue Data Catalog ビューの列のリストを表示します。複合ビューの属性を調べるのに役立ちます。

 データカタログビューの場合、ステートメントの出力は Lake Formation アクセスコントロールによって制御され、呼び出し元がアクセスできる列のみが表示されます。

## 概要
<a name="synopsis"></a>

```
DESCRIBE [db_name.]view_name
```

## 例
<a name="examples"></a>

```
DESCRIBE orders
```

「[SHOW COLUMNS](show-columns.md)」、「[SHOW CREATE VIEW](show-create-view.md)」、「[SHOW VIEWS](show-views.md)」、「[DROP VIEW](drop-view.md)」も参照してください。

# DROP DATABASE
<a name="drop-database"></a>

指定したデータベースをカタログから削除します。データベースにテーブルが含まれている場合は、`DROP DATABASE` を実行する前にそれらのテーブルを削除するか、`CASCADE` 句を使用する必要があります。`DATABASE` と `SCHEMA` はどちらでも使用できます。どちらも同じ意味です。

## 概要
<a name="synopsis"></a>

```
DROP {DATABASE | SCHEMA} [IF EXISTS] database_name [RESTRICT | CASCADE]
```

## パラメータ
<a name="parameters"></a>

**[IF EXISTS]**  
`database_name` が存在しない場合に、エラーを抑制します。

**[RESTRICT\$1CASCADE]**  
`database_name` 内のテーブルを `DROP` オペレーションで処理する方法を決定します。`RESTRICT` を指定すると、テーブルが含まれているデータベースは削除されません。これがデフォルトの動作です。`CASCADE` を指定すると、データベースとそのすべてのテーブルが削除されます。

## 例
<a name="examples"></a>

```
DROP DATABASE clickstreams;
```

```
DROP SCHEMA IF EXISTS clickstreams CASCADE;
```

**注記**  
名前に特殊文字 (例: `my-database`) を含むデータベースを削除しようとすると、エラーメッセージが表示されることがあります。この問題を解決するには、データベース名をバッククォート文字 (`) で囲んでみてください。Athena でのデータベースの名前の付け方については、「[データベース、テーブル、列に名前を付ける](tables-databases-columns-names.md)」を参照してください。

# DROP TABLE
<a name="drop-table"></a>

`table_name` という名前のテーブルからメタデータのテーブル定義を削除します。外部テーブルをドロップすると、基礎となるデータはそのままです。

## 概要
<a name="synopsis"></a>

```
DROP TABLE [IF EXISTS] table_name
```

## パラメータ
<a name="parameters"></a>

**[ IF EXISTS ]**  
`table_name` が存在しない場合に、エラーを抑制します。

## 例
<a name="examples"></a>

```
DROP TABLE fulfilled_orders
```

```
DROP TABLE IF EXISTS fulfilled_orders
```

Athena コンソールのクエリエディタを使用してアンダースコア (\$1) 以外の特殊文字を含むテーブルをドロップする場合は、以下の例にあるように、バックティックを使用します。

```
DROP TABLE `my-athena-database-01.my-athena-table`
```

JDBC コネクタを使用して特殊文字を含むテーブルを削除する場合は、バックティック文字は必要ありません。

```
DROP TABLE my-athena-database-01.my-athena-table
```

# DROP VIEW
<a name="drop-view"></a>

既存の Athena または AWS Glue Data Catalog ビューをドロップ (削除) します。オプションの `IF EXISTS` 句は、ビューが存在しない場合に、エラーが制御される原因となります。

データカタログビューの場合、Athena ビュー構文 (ダイアレクト) がデータカタログビューに存在する場合にのみビューをドロップします。例えば、ユーザーが Athena から `DROP VIEW` を呼び出した場合、ビューに Athena のダイアレクトが存在する場合にのみビューが削除されます。それ以外の場合は、このオペレーションは失敗します。データカタログビューをドロップするには、Lake Formation 管理者またはビュー定義者の許可が必要です。

詳細については、[ビューを使用する](views.md)および[Athena でデータカタログビューを使用する](views-glue.md)を参照してください。

## 概要
<a name="synopsis"></a>

```
DROP VIEW [ IF EXISTS ] view_name
```

## 例
<a name="examples"></a>

```
DROP VIEW orders_by_date
```

```
DROP VIEW IF EXISTS orders_by_date
```

[CREATE VIEW および CREATE PROTECTED MULTI DIALECT VIEW](create-view.md)、[SHOW COLUMNS](show-columns.md)、[SHOW CREATE VIEW](show-create-view.md)、[SHOW VIEWS](show-views.md) および [DESCRIBE VIEW](describe-view.md) も参照してください。

# MSCK REPAIR TABLE
<a name="msck-repair-table"></a>

Hive 互換パーティションを追加した後でカタログ内のメタデータを更新するには、`MSCK REPAIR TABLE` コマンドを使用します。

`MSCK REPAIR TABLE` コマンドは、テーブルの作成後にファイルシステムに追加された Hive 互換パーティションで Simple Storage Service (Amazon S3) などのファイルシステムをスキャンします。`MSCK REPAIR TABLE` は、テーブルメタデータのパーティションと S3 のパーティションを比較します。テーブルの作成時に指定した S3 の場所に新しいパーティションが存在する場合は、これらのパーティションがメタデータと Athena のテーブルに追加されます。

物理パーティションを追加すると、カタログ内のメタデータがファイルシステム内のデータのレイアウトと整合しなくなるので、新しいパーティションに関する情報をカタログに追加する必要があります。メタデータを更新するには、Athena から新しいパーティションのデータをクエリできるように `MSCK REPAIR TABLE` を実行します。

**注記**  
`MSCK REPAIR TABLE` は、パーティションをメタデータに追加するだけであり、パーティションを削除しません。Amazon S3 でパーティションが手動で削除された後でメタデータからそれらのパーティションを削除するには、コマンド `ALTER TABLE table-name DROP PARTITION` を実行します。詳細については、「[ALTER TABLE DROP PARTITION](alter-table-drop-partition.md)」を参照してください。

## 考慮事項と制限事項
<a name="msck-repair-table-considerations"></a>

`MSCK REPAIR TABLE` を使用する際は、次のポイントに注意が必要です。
+ すべてのパーティションを追加するには時間がかかる場合があります。このオペレーションがタイムアウトになると、未完了状態となり、一部のパーティションのみがカタログに追加されます。すべてのパーティションが追加されるまで、同じテーブルで `MSCK REPAIR TABLE` を実行してください。詳細については、「[データのパーティション化](partitions.md)」を参照してください。
+ Hive と互換性のないパーティションの場合、[ALTER TABLE ADD PARTITION](alter-table-add-partition.md) を使用してパーティションをロードすることで、データをクエリできるようにします。
+ Athena で使用されるパーティションの場所は、`s3` プロトコル (`s3://amzn-s3-demo-bucket/folder/` など) を使用する必要があります。Athena では、他のプロトコル (`s3a://bucket/folder/` など) を使用する場所は、そこにあるテーブルに対して `MSCK REPAIR TABLE` クエリを実行する場合にクエリが失敗する原因になります。
+ `MSCK REPAIR TABLE` がフォルダとそのサブフォルダの両方をスキャンして一致するパーティションスキームを検索するため、別個のテーブルのデータは別個のフォルダ階層に保存するようにしてください。例えば、テーブル 1 のデータが `s3://amzn-s3-demo-bucket1` にあり、テーブル 2 のデータが `s3://amzn-s3-demo-bucket1/table-2-data` にあるとします。両方のテーブルが文字列でパーティション分割されている場合、`MSCK REPAIR TABLE` はテーブル 2 のパーティションをテーブル 1 に追加します。これを回避するには、この代わりに `s3://amzn-s3-demo-bucket2` や `s3://amzn-s3-demo-bucket1` といった別個のフォルダ構造を使用します。この動作は、Amazon EMR および Apache Hive と同じであることに注意してください。
+ 既知の問題により、パーティション値にコロン (`:`) 記号が含まれている場合 (例えば、パーティション値がタイムスタンプの場合)、`MSCK REPAIR TABLE` は警告なしに失敗します。回避方法として、[ALTER TABLE ADD PARTITION](alter-table-add-partition.md) を使用します。
+ `MSCK REPAIR TABLE` では、アンダースコア (\$1) で始まるパーティション列名は追加されません。この制限を回避するには、[ALTER TABLE ADD PARTITION](alter-table-add-partition.md) を使用します。

## 概要
<a name="synopsis"></a>

```
MSCK REPAIR TABLE table_name
```

## 例
<a name="examples"></a>

```
MSCK REPAIR TABLE orders;
```

## トラブルシューティング
<a name="msck-repair-table-troubleshooting"></a>

`MSCK REPAIR TABLE` の実行後、AWS Glue Data Catalog のテーブルにパーティションが追加されない場合は、以下をチェックしてください。
+ **AWS Glue アクセス** – AWS Identity and Access Management (IAM) ロールに、`glue:BatchCreatePartition` アクションを許可するポリシーがあることを確認します。詳細については、このドキュメントで後述する「[IAM ポリシーで glue:BatchCreatePartition を許可する](#msck-repair-table-troubleshooting-allow-gluebatchcreatepartition-in-the-policy)」を参照してください。
+ **Amazon S3 アクセス** – ロールに [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DescribeJob.html) アクションを含む Amazon S3 にアクセスするために、十分なアクセス許可を持つポリシーがあることを確認します。許可する Simple Storage Service (Amazon S3) アクションの例については、「[Athena で Amazon S3 バケットへのクロスアカウント アクセスを構成する](cross-account-permissions.md)」のバケットポリシー例を参照してください。
+ **Amazon S3 オブジェクトキーの大文字と小文字の区別** – Amazon S3 パスがキャメルケースではなく小文字になっている (例: `userId` ではなく `userid`) ことを確認するか、`ALTER TABLE ADD PARTITION` を使用してオブジェクトキー名を指定します。詳細については、このドキュメントで後述する「[Amazon S3 パスを変更するか再度定義する](#msck-repair-table-troubleshooting-change-or-redefine-the-amazon-s3-path)」を参照してください。
+ **クエリのタイムアウト** – `MSCK REPAIR TABLE` は、初めてテーブルを作成する場合、またはデータとパーティションメタデータ間のパリティについて不確実性がある場合の使用に最適です。`MSCK REPAIR TABLE` を使用して新しいパーティションを頻繁に追加し (例えば、日常的に追加するなど)、クエリのタイムアウトが発生している場合は、[ALTER TABLE ADD PARTITION](alter-table-add-partition.md) の使用を検討してください。
+ **ファイルシステムからパーティションが欠落している** – Amazon S3 でパーティションを手動で削除してから `MSCK REPAIR TABLE` を実行すると、「Partitions missing from filesystem」というエラーメッセージが表示される場合があります。これは、`MSCK REPAIR TABLE` がテーブルメタデータから古いパーティションを削除しないために発生します。削除済みのパーティションをテーブルメタデータから除外するには、代わりに [ALTER TABLE DROP PARTITION](alter-table-drop-partition.md) を実行します。[SHOW PARTITIONS](show-partitions.md) も同様に、ファイルシステムのパーティションではなく、メタデータのパーティションだけをリストすることに注意してください。
+ **「NullPointerException 名は null です」というエラー**

  AWS Glue [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html) API 操作や CloudFormation [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html) テンプレートを使用して、`TableType` プロパティを指定せずに Athena で使用するテーブルを作成し、`SHOW CREATE TABLE` または `MSCK REPAIR TABLE` などの DDL クエリを実行すると、「失敗: NullPointerException 名は null です」というエラーメッセージを受け取る場合があります。

  このエラーを解決するには、[TableInput](https://docs.aws.amazon.com/glue/latest/webapi/API_TableInput.html) `TableType` 属性の値を AWS Glue `CreateTable` API コール、または [CloudFormation テンプレート](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html)の一部として指定します。`TableType` に使用できる値には、`EXTERNAL_TABLE` や `VIRTUAL_VIEW` が含まれます。

  この要件は、AWS Glue `CreateTable` API 操作や `AWS::Glue::Table` テンプレートを使用してテーブルを作成する場合にだけ適用されます。DDL ステートメントや AWS Glue クローラを使用して Athena のテーブルを作成すると、`TableType` プロパティが自動的に定義されます。

以下のセクションで詳細を説明します。

### IAM ポリシーで glue:BatchCreatePartition を許可する
<a name="msck-repair-table-troubleshooting-allow-gluebatchcreatepartition-in-the-policy"></a>

`MSCK REPAIR TABLE` の実行に使用しているロールにアタッチされている IAM ポリシーを見直します。[Athena で AWS Glue Data Catalog を使用](data-sources-glue.md)する場合は、IAM ポリシーで `glue:BatchCreatePartition` アクションが許可されている必要があります。`glue:BatchCreatePartition` アクションを許可する IAM ポリシーの例については、「[AWS 管理ポリシー: AmazonAthenaFullAccess](security-iam-awsmanpol.md#amazonathenafullaccess-managed-policy)」を参照してください。

### Amazon S3 パスを変更するか再度定義する
<a name="msck-repair-table-troubleshooting-change-or-redefine-the-amazon-s3-path"></a>

Amazon S3 パスの 1 つ以上のオブジェクトキーが小文字ではなくキャメルケースになっている場合、`MSCK REPAIR TABLE` がパーティションを AWS Glue Data Catalog に追加しない場合があります。例えば、Amazon S3 パスにオブジェクトキー名 `userId` が含まれている場合、次のパーティションが AWS Glue Data Catalog に追加されない可能性があります。

```
s3://amzn-s3-demo-bucket/path/userId=1/

s3://amzn-s3-demo-bucket/path/userId=2/

s3://amzn-s3-demo-bucket/path/userId=3/
```

この問題を解決するには、次のいずれかを実行します。
+ Amazon S3 オブジェクトキーを作成するときには、キャメルケースではなく小文字を使用してください。

  ```
  s3://amzn-s3-demo-bucket/path/userid=1/
  
  s3://amzn-s3-demo-bucket/path/userid=2/
  
  s3://amzn-s3-demo-bucket/path/userid=3/
  ```
+ 次の例に示されているように、[ALTER TABLE ADD PARTITION](alter-table-add-partition.md) を使用して場所を再度定義します。

  ```
  ALTER TABLE table_name ADD [IF NOT EXISTS]
  PARTITION (userId=1)
  LOCATION 's3://amzn-s3-demo-bucket/path/userId=1/'
  PARTITION (userId=2)
  LOCATION 's3://amzn-s3-demo-bucket/path/userId=2/'
  PARTITION (userId=3)
  LOCATION 's3://amzn-s3-demo-bucket/path/userId=3/'
  ```

Amazon S3 オブジェクトキー名には大文字を使用できますが、Amazon S3 バケットの名称は常に小文字にする必要があります。詳細については、「Amazon S3 ユーザーガイド」の「[オブジェクトキー命名ガイドライン](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html#object-key-guidelines)」と「[バケット命名規則](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html)」を参照してください。

# SHOW COLUMNS
<a name="show-columns"></a>

指定された単一のテーブル、Athena ビュー、またはデータカタログビューの列名のみを表示します。Athena ビューのより詳細な情報を取得するには、代わりに AWS Glue Data Catalog をクエリします。詳細と例については、[AWS Glue Data Catalog をクエリする](querying-glue-catalog.md) トピックの次のセクションを参照してください。
+ 列メタデータ (データ型など) を表示するには、「[指定したテーブルまたはビューの列を一覧表示または検索する](querying-glue-catalog-listing-columns.md)」を参照してください。
+ `AwsDataCatalog` の特定のデータベース内の全テーブルですべての列を一覧表示するには、「[指定したテーブルまたはビューの列を一覧表示または検索する](querying-glue-catalog-listing-columns.md)」を参照してください。
+ `AwsDataCatalog` の全データベースにある全テーブルの全列を表示するには、「[全テーブルのすべての列を一覧表示する](querying-glue-catalog-listing-all-columns-for-all-tables.md)」を参照してください。
+ データベース内の特定のテーブルに共通する列を表示するには、「[特定のテーブルに共通する列を一覧表示する](querying-glue-catalog-listing-columns-in-common.md)」 を参照してください。

データカタログビューの場合、ステートメントの出力は Lake Formation アクセスコントロールによって制御され、呼び出し元がアクセスできる列のみが表示されます。

## 概要
<a name="synopsis"></a>

```
SHOW COLUMNS {FROM|IN} database_name.table_or_view_name
```

```
SHOW COLUMNS {FROM|IN} table_or_view_name [{FROM|IN} database_name]
```

`FROM` および `IN` キーワードは、同じように使用できます。*table\$1or\$1view\$1name* または *database\$1name* にハイフンのような特殊文字が含まれている場合は、名前をバッククォートで囲みます (``my-database`.`my-table`` など)。*table\$1or\$1view\$1name* または *database\$1name* をシングルクォートまたはダブルクォートで囲んではいけません。現在、`LIKE` およびパターンマッチングの式の使用はサポートされていません。

## 例
<a name="examples"></a>

次の例はどれも同等で、`customers` データベース内の `orders` テーブルの列を表示します。最初の 2 つの例では、`customers` が現在のデータベースとします。

```
SHOW COLUMNS FROM orders
```

```
SHOW COLUMNS IN orders
```

```
SHOW COLUMNS FROM customers.orders
```

```
SHOW COLUMNS IN customers.orders
```

```
SHOW COLUMNS FROM orders FROM customers
```

```
SHOW COLUMNS IN orders IN customers
```

# SHOW CREATE TABLE
<a name="show-create-table"></a>

`table_name` という既存のテーブルを分析し、作成元のクエリを生成します。

## 概要
<a name="synopsis"></a>

```
SHOW CREATE TABLE [db_name.]table_name
```

## パラメータ
<a name="parameters"></a>

**TABLE [db\$1name.]table\$1name**  
`db_name` パラメータはオプションです。省略すると、コンテキストはデフォルトで現在のデータベースになります。  
テーブル名は必須です。

## 例
<a name="examples"></a>

```
SHOW CREATE TABLE orderclickstoday;
```

```
SHOW CREATE TABLE `salesdata.orderclickstoday`;
```

## トラブルシューティング
<a name="show-create-table-troubleshooting"></a>

AWS Glue [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html) API 操作や CloudFormation [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-glue-table.html) テンプレートを使用して、`TableType` プロパティを指定せずに Athena で使用するテーブルを作成し、`SHOW CREATE TABLE` または `MSCK REPAIR TABLE` などの DDL クエリを実行すると、「失敗: NullPointerException 名は null です」というエラーメッセージを受け取る場合があります。

このエラーを解決するには、[TableInput](https://docs.aws.amazon.com/glue/latest/webapi/API_TableInput.html) `TableType` 属性の値を AWS Glue `CreateTable` API コール、または [CloudFormation テンプレート](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-glue-table-tableinput.html)の一部として指定します。`TableType` に使用できる値には、`EXTERNAL_TABLE` や `VIRTUAL_VIEW` が含まれます。

この要件は、AWS Glue `CreateTable` API 操作や `AWS::Glue::Table` テンプレートを使用してテーブルを作成する場合にだけ適用されます。DDL ステートメントや AWS Glue クローラを使用して Athena のテーブルを作成すると、`TableType` プロパティが自動的に定義されます。

# SHOW CREATE VIEW
<a name="show-create-view"></a>

指定された Athena またはデータカタログビューを作成した SQL ステートメントを表示します。返される SQL には、Athena で使用されているビュー作成構文が表示されます。データカタログビューで `SHOW CREATE VIEW` を呼び出すには、Lake Formation 管理者またはビュー定義者の許可が必要です。

## 概要
<a name="synopsis"></a>

```
SHOW CREATE VIEW view_name
```

## 例
<a name="examples"></a>

```
SHOW CREATE VIEW orders_by_date
```

「[CREATE VIEW および CREATE PROTECTED MULTI DIALECT VIEW](create-view.md)」および「[DROP VIEW](drop-view.md)」も参照してください。

# SHOW DATABASES
<a name="show-databases"></a>

メタストアに定義されているすべてのデータベースを一覧表示します。`DATABASES` または `SCHEMAS` を使用できます。どちらも同じ意味です。

`SHOW DATABASES` と同等の動作をプログラム的に行うのは、[ListDatabases](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListDatabases.html) Athena API アクションです。AWS SDK for Python (Boto3) での同等のメソッドは、[list\$1databases](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/athena/client/list_databases.html) です。

## 概要
<a name="synopsis"></a>

```
SHOW {DATABASES | SCHEMAS} [LIKE 'regular_expression']
```

## パラメータ
<a name="parameters"></a>

**[LIKE '*regular\$1expression*']**  
データベースのリストをフィルタ処理して、指定した `regular_expression` と一致するものに絞り込みます。ワイルドカード文字の照合では、組み合わせ `.*` を使用できます。この組み合わせは、任意のゼロ文字に無制限に一致します。

## 例
<a name="examples"></a>

```
SHOW SCHEMAS;
```

```
SHOW DATABASES LIKE '.*analytics';
```

# SHOW PARTITIONS
<a name="show-partitions"></a>

Athena テーブルのすべてのパーティションをソートせずに表示します。

## 概要
<a name="synopsis"></a>

```
SHOW PARTITIONS table_name
```
+ テーブル内のパーティションを表示し、特定の順序で一覧表示するには、[AWS Glue Data Catalog をクエリする](querying-glue-catalog.md) ページの「[特定のテーブルのパーティションを一覧表示する](querying-glue-catalog-listing-partitions.md)」セクションを参照してください。
+ パーティションの内容を表示するには、[データのパーティション化](partitions.md) ページの「[データのクエリ](partitions.md#query-the-data)」セクションを参照してください。
+ `SHOW PARTITIONS` は、Athena によって射影されていても、AWS Glue カタログに登録されていないパーティションをリストしません。パーティション射影の詳細については、「[Amazon Athena でパーティション射影を使用する](partition-projection.md)」を参照してください。
+  `SHOW PARTITIONS` はメタデータのパーティションをリストしますが、実際のファイルシステムにあるパーティションはリストしません。Amazon S3 でパーティションを手動で削除してからメタデータを更新するには、[ALTER TABLE DROP PARTITION](alter-table-drop-partition.md) を実行してください。

## 例
<a name="examples"></a>

次のクエリの例では、`flight_delays_csv` テーブルのパーティションが表示されます。このテーブルには、米国運輸省のフライトテーブルデータが表示されます。この `flight_delays_csv` テーブルの例の詳細については、「[CSV、TSV、カスタム区切りファイル用の Lazy Simple SerDe](lazy-simple-serde.md)」を参照してください。テーブルは、年ごとにパーティション化されます。

```
SHOW PARTITIONS flight_delays_csv
```

**結果**

```
year=2007
year=2015
year=1999
year=1993
year=1991
year=2003
year=1996
year=2014
year=2004
year=2011
...
```

次のクエリの例では、`impressions` テーブルのパーティションが表示されます。このテーブルには、ウェブ閲覧データのサンプルが含まれています。この `impressions` テーブルの例の詳細については、「[データのパーティション化](partitions.md)」を参照してください。テーブルは、`dt` (datetime) 列によってパーティション化されています。

```
SHOW PARTITIONS impressions
```

**結果**

```
dt=2009-04-12-16-00
dt=2009-04-13-18-15
dt=2009-04-14-00-20
dt=2009-04-12-13-00
dt=2009-04-13-02-15
dt=2009-04-14-12-05
dt=2009-04-14-06-15
dt=2009-04-12-21-15
dt=2009-04-13-22-15
...
```

### パーティションをソートしてリストする
<a name="show-partitions-examples-ordering"></a>

結果リストでパーティションを整列させるには、`SHOW PARTITIONS` の代わりに次の `SELECT` 構文を使用します。

```
SELECT * FROM database_name."table_name$partitions" ORDER BY column_name
```

次のクエリでは、`flight_delays_csv` の例のパーティションの一覧を表示しますが、ソートされます。

```
SELECT * FROM "flight_delays_csv$partitions" ORDER BY year
```

**結果**

```
year
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
...
```

詳細については、[AWS Glue Data Catalog をクエリする](querying-glue-catalog.md) ページの「[特定のテーブルのパーティションを一覧表示する](querying-glue-catalog-listing-partitions.md)」セクションを参照してください。

# SHOW TABLES
<a name="show-tables"></a>

データベース内のすべての基本テーブルとビューを一覧表示します。

**注記**  
[GetQueryExecution](https://docs.aws.amazon.com/athena/latest/APIReference/API_GetQueryExecution.html) API オペレーションの `SHOW TABLES` の [StatementType](https://docs.aws.amazon.com/athena/latest/APIReference/API_QueryExecution.html#athena-Type-QueryExecution-StatementType) パラメータは `DDL` ではなく `UTILITY` に分類されます。

## 概要
<a name="synopsis"></a>

```
SHOW TABLES [IN database_name] ['regular_expression']
```

## パラメータ
<a name="parameters"></a>

**[IN database\$1name]**  
テーブルを一覧表示する `database_name` を指定します。省略すると、現在のコンテキストのデータベースが使用されます。  
`database_name` がハイフンなどの[サポートされていない文字](tables-databases-columns-names.md)を使用すると、`SHOW TABLES` は失敗する可能性があります。回避策として、データベース名をバッククォートで囲んでみてください。

**['regular\$1expression']**  
テーブルのリストをフィルタして、指定した `regular_expression` と一致するものに絞り込みます。`AWSDataCatalog` テーブルの任意の文字を示すには、`*` または `.*` ワイルドカード式を使用できます。Apache Hive データベースの場合は、`.*` ワイルドカード式を使用します。文字間の選択を示すには、`|` 文字を使用します。

## 例
<a name="examples"></a>

**Example – データベース `sampledb` 内のすべてのテーブルを表示します**  

```
SHOW TABLES IN sampledb
```
`Results`  

```
alb_logs
cloudfront_logs
elb_logs
flights_2016
flights_parquet
view_2016_flights_dfw
```

**Example – `sampledb` 内にある「flights」という単語を含むすべてのテーブルの名前を表示します**  

```
SHOW TABLES IN sampledb '*flights*'
```
`Results`  

```
flights_2016
flights_parquet
view_2016_flights_dfw
```

**Example – `sampledb` 内にある「logs」という単語で終わるすべてのテーブルの名前を表示します**  

```
SHOW TABLES IN sampledb '*logs'
```
`Results`  

```
alb_logs
cloudfront_logs
elb_logs
```

# SHOW TBLPROPERTIES
<a name="show-tblproperties"></a>

指定されたテーブルのテーブルプロパティを一覧表示します。

## 概要
<a name="synopsis"></a>

```
SHOW TBLPROPERTIES table_name [('property_name')]
```

## パラメータ
<a name="parameters"></a>

**[('property\$1name')]**  
このパラメータを含めると、`property_name` というプロパティの値のみが表示されます。

## 例
<a name="examples"></a>

```
SHOW TBLPROPERTIES orders;
```

```
SHOW TBLPROPERTIES orders('comment');
```

# SHOW VIEWS
<a name="show-views"></a>

`STRING` タイプの値のリストに Athena またはデータカタログビューを一覧表示します。リスト内の各値は、指定されたデータベース内のビューの名前、またはデータベース名を省略した場合は現在のデータベース内のビューの名前です。オプションの `LIKE` 句を正規表現で使用して、ビュー名のリストを制限します。データカタログビューの場合、Athena SQL 構文を使用するビューのみを一覧表示します。他のデータカタログビューは除外されます。

## 概要
<a name="synopsis"></a>

```
SHOW VIEWS [IN database_name] [LIKE 'regular_expression']
```

### パラメータ
<a name="parameters"></a>

**[IN database\$1name]**  
ビューを一覧表示する `database_name` を指定します。省略すると、現在のコンテキストのデータベースが使用されます。

**[LIKE 'regular\$1expression']**  
ビューのリストをフィルタして、指定した `regular_expression` と一致するものに絞り込みます。使用できるのは、任意の文字を示すワイルドカードの `*`、または複数の文字からの選択を示す `|` のみです。

## 例
<a name="examples"></a>

```
SHOW VIEWS
```

```
SHOW VIEWS IN marketing_analytics LIKE 'orders*'
```

「[SHOW COLUMNS](show-columns.md)」、「[SHOW CREATE VIEW](show-create-view.md)」、「[DESCRIBE VIEW](describe-view.md)」、「[DROP VIEW](drop-view.md)」も参照してください。