

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# S3 Select と Hive を使用してパフォーマンスを向上させる
<a name="emr-hive-s3select"></a>

**重要**  
新規のお客様への Amazon S3 Select の提供は終了しました。Amazon S3 Select をご利用の既存のお客様は、今後も通常どおり使用できます。[詳細はこちら](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon EMR リリースバージョン 5.18.0 以降では、Amazon EMR での Hive を使用した [S3 Select](https://aws.amazon.com/blogs/aws/s3-glacier-select/) を使用できます。S3 Select では、アプリケーションはオブジェクトに含まれるデータのサブセットのみを取得できます。Amazon EMR では、大量のデータセットをフィルタリングして処理する計算作業をクラスターから Amazon S3 に「プッシュダウン」することにより、一部のアプリケーションのパフォーマンスを高めることができます。また、Amazon EMR と Amazon S3 の間で転送されるデータの量も削減されます。

S3 Select では、Hive セッション中に `s3select.filter` 設定変数を `true` に設定することで、CSV ファイルと JSON ファイルに基づいて Hive テーブルがサポートされています。詳細な説明と例については、[コードで S3 Select を指定する](#emr-hive-s3select-specify) を参照してください。

## S3 Select が使用するアプリケーションに適しているかどうかを確認する
<a name="emr-hive-s3select-apps"></a>

S3 Select が使用するアプリケーションに適しているかどうかを確認するために、S3 Select を使用した場合と使用しない場合のアプリケーションのベンチマークを行うことをお勧めします。

アプリケーションが S3 Select を使用する候補となるかどうかを判断するには、次のガイドラインを使用します。
+ クエリは元のデータセットの半分以上を除外する。
+ クエリのフィルター述語では、Amazon S3 Select がサポートするデータ型を持つ列が使用される。詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[データ型](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html)」を参照してください。
+ Amazon S3 と Amazon EMR クラスター間のネットワーク接続は、転送速度と使用可能な帯域幅が良好です。Amazon S3 は、HTTP 応答を圧縮しないため、応答サイズは圧縮された入力ファイルと比較して増加する可能性があります。

## 考慮事項と制限事項
<a name="emr-hive-s3select-considerations"></a>
+ お客様が用意した暗号化キーを使用した Amazon S3 サーバー側の暗号化 (SSE-C) とクライアント側の暗号化はサポートされていません。
+ `AllowQuotedRecordDelimiters` プロパティはサポートされていません。このプロパティを指定した場合、クエリは失敗します。
+ UTF-8 形式の CSV ファイルと JSON ファイルのみがサポートされています。複数行の CSV と JSON はサポートされません。
+ 圧縮されていないファイルか gzip ファイルまたは bzip2 ファイルのみがサポートされます。
+ 最後の行のコメント文字はサポートされていません。
+ ファイルの末尾にある空の行は処理されません。
+ Amazon EMR の Hive では、S3 Select がサポートするプリミティブデータ型がサポートされています。詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[データ型](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html)」を参照してください。

## コードで S3 Select を指定する
<a name="emr-hive-s3select-specify"></a>

Hive テーブルで S3 Select を使用するには、`INPUTFORMAT` クラス名として `com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat` を指定してテーブルを作成し、`TBLPROPERTIES` 句を使用して `s3select.format` プロパティの値を指定します。

デフォルトでは、S3 Select はクエリの実行時に無効になっています。次に示すように Hive セッションで `s3select.filter` を `true` に設定して S3 Select を有効にします。以下の例では、基盤となる CSV ファイルと JSON ファイルからテーブルを作成するときに S3 Select を指定して、シンプルな SELECT ステートメントを使用してテーブルをクエリする方法を説明しています。

**Example CSV ベースのテーブルの CREATE TABLE ステートメント**  

```
CREATE TABLE mys3selecttable (
col1 string,
col2 int,
col3 boolean
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS
INPUTFORMAT
  'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://path/to/mycsvfile/'
TBLPROPERTIES (
  "s3select.format" = "csv",
  "s3select.headerInfo" = "ignore"
);
```

**Example JSON ベースのテーブルの CREATE TABLE ステートメント**  

```
CREATE TABLE mys3selecttable (
col1 string,
col2 int,
col3 boolean
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS
INPUTFORMAT
  'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://path/to/json/'
TBLPROPERTIES (
  "s3select.format" = "json"
);
```

**Example SELECT TABLE ステートメント**  

```
SET s3select.filter=true;
SELECT * FROM mys3selecttable WHERE col2 > 10;
```