web-dev-qa-db-ja.com

ハイブの `load data inpath`と `location`の違いは?

私の会社では、これらの2つのコマンドが頻繁に使用されているのを確認しました。機能は同じに見えるので、違いを認識したいと思います。

1

create table <mytable> 
(name string,
number double);

load data inpath '/directory-path/file.csv' into <mytable>; 

2

create table <mytable>
(name string,
number double);

location '/directory-path/file.csv';

どちらも、HDFSのディレクトリからHiveのテーブルのディレクトリにデータをコピーします。これらを使用するときに注意すべき違いはありますか?ありがとうございました。

8
Hunle

はい、さまざまな目的で使用されています。

load data inpathコマンドを使用して、データをHiveテーブルにロードします。 「LOCAL」は、入力ファイルがローカルファイルシステム上にあることを示します。 「LOCAL」を省略した場合、HDFSでファイルが検索されます。

load data inpath '/directory-path/file.csv' into <mytable>; 
load data local inpath '/local-directory-path/file.csv' into <mytable>;

[〜#〜] location [〜#〜]キーワードを使用すると、指定されたフォルダに保存されるのではなく、ストレージのHDFSの場所をポイントできます構成プロパティHive.metastore.warehouse.dir.

つまり、指定されたLOCATION '/your-path/'、Hiveはこのテーブルのデフォルトの場所を使用しません。これは、すでにデータを生成している場合に便利です。

LOCATIONはEXTERNALテーブルでのみ指定できることに注意してください。通常のテーブルの場合、デフォルトの場所が使用されます。

要約すると、load data inpathはHiveに入力ファイルを探す場所と[〜#〜]場所[〜 #〜]キーワードは、HDFS上の出力ファイルを保存する場所をHiveに指示します。

参照: https://cwiki.Apache.org/confluence/display/Hive/GettingStartedhttps://cwiki.Apache.org/confluence/display/Hive/LanguageManual+DDL

10
Sachin Gaikwad

オプション1:内部テーブル

create table <mytable> 
(name string,
number double);

load data inpath '/directory-path/file.csv' into <mytable>; 

このコマンドは、ソースディレクトリのコンテンツを削除し、内部テーブルを作成します

オプション2:外部テーブル

 create table <mytable>
 (name string,
 number double);

location '/directory-path/file.csv';

外部テーブルを作成し、データをテーブルにコピーします。これで、データはソースから移動されません。外部テーブルを削除できますが、ソースデータは引き続き使用できます。

外部テーブルを削除すると、Hiveテーブルのメタデータのみが削除されます。データはまだHDFSファイルの場所に存在します。

内部テーブルと外部テーブルの両方の使用例に関する、関連するSEの質問をご覧ください

Hive内部テーブルと外部テーブルの違い?

4
Ravindra babu