1
4

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 5 years have passed since last update.

既に存在するHiveのテーブルからDDLを作成する方法

Posted at

はじめに

軽く調べましたが、HiveにおいてテーブルからDDLを生成する方法が
日本語で纏められているサイトが見つからなかったため、纏めました。
※MySQL等は纏められていました。
コマンド自体はMySQLと一緒(show create table)ですので、細かいところを
フォローできればと思います。

前提

DB名は「SampleDB」とする。
テーブル名は「SampleTable」とする。

DDLを作成してみる

コマンドは至って単純である。

hive -e "use SampleDB; show create table SampleTable;"

上記コマンドでDDLを表示できる。
リダイレクトすればDDLファイルの作成が可能である。

hive -e "use SampleDB; show create table SampleTable;" >SampleTable.DDL

注意点

制約なのか、Hue(GUI)においてはDB名指定コマンドで動作しない場合がありました。
動作しない場合は

OK
FAILED:SemanticException [Error 10001]: Table not found SampleTable

と出力されました。
動作する・動作しないのパターンは下記の通り。

【動作するパターン】
Hueでテーブルの存在するDBをデータベース選択し、下記コマンドを実行した場合。
use SampleDB; show create table SampleTable;
または
show create table SampleTable;

【動作しないパターン】
Hueでテーブルの存在するDB以外をデータベース選択し、下記コマンドを実行した場合。
use SampleDB; show create table SampleTable;

作成したDDLについて

作成したDDLファイルをそのまま使用することもできますが、
DB名の指定が存在しないため、お勧めしません。
DDLファイルの読み込みはhive -fコマンドで行えます。
hive -f SampleTable.DDL
DB名の指定が無い状態でテーブルを作成した場合は「default」というDBに
テーブルが作成されます。

作成したDDLファイルは以下のように記載されている。
※一例。作成するときに参照するTABLEによっては一部項目は出力されない。
 また、項目の細部が異なる可能性があります。

CREATE TABLE SampleTable(
  A_column string,
  B_column string,
  C_column string)
ROW FORMAT DELIMITED
  FIELDS TERMINATED BY ','
  LINES TERMINATED BY '\n'
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://mycluster/user/woadachi/sample'
TBLPROPERTIES (
  'last_modified_by'='woadachi'
  'last_modified_time'='XXXXXXXXXX'
  'transient_lastDdlTime'='XXXXXXXXXX')

別に削らなくてもいいですが、この中で
「STORED AS INPUTFORMAT」と「OUTPUTFORMAT」と「TBLPROPERTIES」は
削っても問題ないと思います。

なお、DDLファイルの先頭行にDB名を追加すれば、指定のDBに
テーブルを作成することができます。
後、個人的には最終行の行末に「;」が欲しいです。無いと落ち着かない……

use SampleDB;

CREATE TABLE SampleTable(
  A_column string,
  B_column string,
  C_column string)
ROW FORMAT DELIMITED
  FIELDS TERMINATED BY ','
  LINES TERMINATED BY '\n'
LOCATION
  'hdfs://mycluster/user/woadachi/sample'
;

活用

既存のテーブルのDDLを作成し、管理するためだけでなく、
既存のテーブルをDDL出力して流用することで業務効率化が図れると思います。
また、ここまで紹介した内容をLinuxコマンドと組み合わせてシェル化することで、
任意のDBの任意のテーブルに対して自動でDDLを作成するシェルを作成することも
可能だと思います。

1
4
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
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?