LOAD DATA
説明
LOAD DATA
ステートメントは、ユーザーが指定したディレクトリまたはファイルからデータに対して Hive SerDe テーブルを読み込みます。ディレクトリを指定すると、ディレクトリ内のすべてのファイルが読み込まれます。ファイルを指定すると、単一のファイルのみが読み込まれます。さらに、LOAD DATA
ステートメントはオプションのパーティション仕様を取ります。パーティションを指定すると、データファイル (入力ソースがディレクトリの場合) または単一のファイル (入力ソースがファイルの場合) がターゲット テーブルのパーティションに読み込まれます。
テーブルがキャッシュされている場合、コマンドによってテーブルとそのテーブルを参照するすべての依存関係のキャッシュされたデータがクリアされます。テーブルまたは依存関係に次回アクセスすると、キャッシュは遅延して読み込まれます。
構文
LOAD DATA [ LOCAL ] INPATH path [ OVERWRITE ] INTO TABLE table_identifier [ partition_spec ]
パラメーター
-
path
ファイルシステムのパス。絶対パスまたは相対パスにすることができます。
-
table_identifier
テーブル名を指定します。オプションでデータベース名で修飾できます。
構文:
[ database_name. ] table_name
-
partition_spec
パーティションのキーと値のペアのカンマ区切りのリストを指定するオプションのパラメーター。
構文:
PARTITION ( partition_col_name = partition_col_val [ , ... ] )
-
LOCAL
指定すると、通常は分散ストレージであるデフォルトのファイルシステムではなく、ローカルファイルシステムに対して
INPATH
が解決されます。 -
OVERWRITE
デフォルトでは、新しいデータはテーブルに追加されます。
OVERWRITE
が使用された場合、テーブルは代わりに新しいデータで上書きされます。
例
-- Example without partition specification.
-- Assuming the students table has already been created and populated.
SELECT * FROM students;
+---------+----------------------+----------+
| name| address|student_id|
+---------+----------------------+----------+
|Amy Smith|123 Park Ave, San Jose| 111111|
+---------+----------------------+----------+
CREATE TABLE test_load (name VARCHAR(64), address VARCHAR(64), student_id INT) USING HIVE;
-- Assuming the students table is in '/user/hive/warehouse/'
LOAD DATA LOCAL INPATH '/user/hive/warehouse/students' OVERWRITE INTO TABLE test_load;
SELECT * FROM test_load;
+---------+----------------------+----------+
| name| address|student_id|
+---------+----------------------+----------+
|Amy Smith|123 Park Ave, San Jose| 111111|
+---------+----------------------+----------+
-- Example with partition specification.
CREATE TABLE test_partition (c1 INT, c2 INT, c3 INT) PARTITIONED BY (c2, c3);
INSERT INTO test_partition PARTITION (c2 = 2, c3 = 3) VALUES (1);
INSERT INTO test_partition PARTITION (c2 = 5, c3 = 6) VALUES (4);
INSERT INTO test_partition PARTITION (c2 = 8, c3 = 9) VALUES (7);
SELECT * FROM test_partition;
+---+---+---+
| c1| c2| c3|
+---+---+---+
| 1| 2| 3|
| 4| 5| 6|
| 7| 8| 9|
+---+---+---+
CREATE TABLE test_load_partition (c1 INT, c2 INT, c3 INT) USING HIVE PARTITIONED BY (c2, c3);
-- Assuming the test_partition table is in '/user/hive/warehouse/'
LOAD DATA LOCAL INPATH '/user/hive/warehouse/test_partition/c2=2/c3=3'
OVERWRITE INTO TABLE test_load_partition PARTITION (c2=2, c3=3);
SELECT * FROM test_load_partition;
+---+---+---+
| c1| c2| c3|
+---+---+---+
| 1| 2| 3|
+---+---+---+