0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Impala で、S3 の特定のフォルダを外部テーブルとして定義する方法(Cloudera Data Platform)

Last updated at Posted at 2023-10-25

この記事について

Impala でテーブル作成する方法をいつも忘れそうになるのでメモ。

前提

S3

S3 の特定フォルダに、スキーマの揃ったデータが入っていること
(CSV, AVRO, PARQUET の場合を掲載)
データ形式によって若干定義が異なる

Impala

Cloudera Data Platform (Public Cloud) の CDW Hue を利用

CSVの場合

CSVの場合
-- Hive外部テーブルの作成
CREATE EXTERNAL TABLE test_table
(
-- ここのスキーマは、S3で保持するデータのスキーマに合わせる
actor_id int,
first_name string,
last_name string,
last_update string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',' -- 項目の区切り文字は','(カンマ)
LINES TERMINATED BY '\n' -- 行の区切り文字は改行コード
STORED AS TEXTFILE -- ファイルフォーマットはテキストファイル
LOCATION -- ファイルの保存場所
's3a://test-bucket/test/path'
tblproperties(
"skip.header.line.count"="1" -- 先頭1行をヘッダとして読み飛ばす
)
;

AVRO, PARQUET, ORC の場合

AVROの場合
-- Hive外部テーブルの作成
CREATE EXTERNAL TABLE test_table
(
-- このスキーマ定義は、LOCATION句で指定したファイルのスキーマの名称と合わせる
-- スキーマの中から一部の項目だけをテーブルに切り出したい場合は、その切り出したい項目だけを定義する
actor_id int,
first_name string,
last_name string,
last_update string
)
STORED AS AVRO
LOCATION -- ファイルの保存場所
's3a://test-bucket/test/path'
;

ORC や Parquet の場合は、AVRO の 場合の STORED AS を ORCや PARQUET に変えるだけでいける。

PARQUET で、スキーマを手で定義しない場合

上記のように、スキーマをいちいち手で定義したくない場合、かつPARQUET が持っている全項目をとりあえずテーブルに入れられればいいよ! という場合は、以下の方法あり。

PARQUETの場合
-- Hive外部テーブルの作成
CREATE EXTERNAL TABLE test_table
-- このファイルに定義しているスキーマを使ってテーブルを作ってね! という指定
-- LOCATION句とは別のパスでも問題ない
LIKE PARQUET 's3a://test-bucket/test/path/ファイル名'
STORED AS PARQUET
LOCATION -- ファイルの保存場所(テーブルの中身として入れるファイル)
's3a://test-bucket/test/path'
;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?