1

S3 バケットの場所を指すEXTERNALキーワードを使用して外部テーブルを作成すると、1 つのことに気付きました。データが読み込まれ、クエリを実行できます。ただし、EXTERNALキーワードを使用せず、残りのスクリプトを使用してテーブルを作成しても。それでも完璧に動作します。なぜそうなのですか?また、外部表ですか、それとも内部表ですか。このテーブルを削除すると、メタデータまたはデータも削除されますか? EXTERNALという用語の意味はありますか?

EXTERNAL キーワードと場所を使用してテーブルを作成し、EXTERNAL キーワードを使用せずに場所を使用して別のテーブルを作成するとします。同じ動作をしている場合の違いは何ですか?

create table dummy(id int, value string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '~'
    STORED AS TEXTFILE
    LOCATION 's3n://logs/july';

                 VS

create external table dummy(id int, value string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '~'
        STORED AS TEXTFILE
        LOCATION 's3n://logs/july';
4

2 に答える 2

2

管理されたテーブルでLocationを使用する場合、その目的は、このテーブル専用の新しいディレクトリを作成することです。それ以外の場合は、デフォルトの場所/user/hive/warehouse/に移動します。だから、あなたがするとき:

create table dummy(id int, value string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '~'
    STORED AS TEXTFILE
    LOCATION 's3n://logs/july';

/user/hive/warehouse/内にディレクトリダミーを作成する代わりに、テーブルダミー用にs3n://logs/julyという新しいディレクトリを作成します。

存在しない場所の外部テーブルでLocationを使用すると、同じことが起こります。外部テーブルの作成中に、存在するディレクトリの場所を指定すると、このディレクトリ内のすべてのファイルがまとめてこのテーブルのデータを構成します。ディレクトリが存在しない場合は、管理されたテーブルと同じ動作が見られます。つまり、create コマンドの発行時に指定した場所と同じ場所に空のディレクトリでテーブルが作成されます。言う、あなたがする:

create external table dummy(id int, value string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '~'
        STORED AS TEXTFILE
        LOCATION 's3n://logs/july';

s3n ://logs/julyが存在する場合、テーブルダミーが作成され、 s3n://logs/julyの下に存在するファイルからデータが作成されます。s3n ://logs/julyが存在しない場合、create コマンドを発行した直後に、まったく同じ場所に新しいディレクトリが表示されます。また、このテーブルを削除すると、ディレクトリs3n://logs/julyはそのまま残りますが、空白のままになります (テーブルの作成中に存在しない場所を指定したため)。

管理対象テーブルを削除すると、それがLocation句で作成されたものであっても、 Location で表されるディレクトリが削除されます。両方のケースでどのように同じ動作をするのかわかりません。これを試して、何を観察したか教えてください。

ところで、SOは知識と考えを精神と共有する場所です. そして、熱狂したり、個人的に物事を受け止めたりしないでください。意見が一致しない場合は、自分の意見を述べる適切な方法があります。そして、それが単に反対票だった場合は、私に知らせてください. すべての質問と回答に賛成します。

于 2013-07-13T01:23:34.083 に答える