私の会社では、これらの2つのコマンドが頻繁に使用されているのを確認しました。機能は同じに見えるので、違いを認識したいと思います。
create table <mytable>
(name string,
number double);
load data inpath '/directory-path/file.csv' into <mytable>;
create table <mytable>
(name string,
number double);
location '/directory-path/file.csv';
どちらも、HDFSのディレクトリからHiveのテーブルのディレクトリにデータをコピーします。これらを使用するときに注意すべき違いはありますか?ありがとうございました。
はい、さまざまな目的で使用されています。
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
オプション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の質問をご覧ください