1

パイプセパレーターを使用した巨大なファイルから、多数の列 (文字列)(>100) を持つ Hive テーブルを作成する最良の方法は何でしょうか。

  1. create table コマンドで 100 を超える列名を指定すると問題になりますか。
  2. 各列に名前を付けたくない場合は、a) 列名をまったく指定せず、Hive にデフォルトの名前付けに従って列名を付けさせます。b) 最初の 10 と言う列の一部だけに言及します。この場合、残りの列はどうなりますか? 私はこのようにしてみました:

     CREATE EXTERNAL TABLE IF NOT EXISTS table1
     ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
     LOCATION 'folder1/folder2/folder3/filename';
    

「列のリストまたはカスタム シリアライザーのいずれかを指定する必要があります」というエラーが表示されます。カスタムシリアライザーが必要ですか? 外部テーブルにパーティションがない場合、パーティションを追加するにはどうすればよいですか?

4

1 に答える 1

-1
  1. ハイブでテーブルを作成するための汎用スクリプトを作成します。ここでは、hiveconf を使用して区切り文字、パス、テーブル名、およびスキーマを動的に取得します

    create table ${hiveconf:tablename}(${hiveconf:schema}) '${hiveconf:delimiter}' で終了する行形式の区切られたフィールド 場所 '${hiveconf:location}';

  2. 上記のスクリプトを実行するためのシェルスクリプトを書く

    hive -hiveconf tablename=$1 -hiveconf schema=$2 -hiveconf delimiter=$3 -hiveconf location=$4 -f abovefilpath.q

3. パラメータをシェル スクリプトに渡し、シェル スクリプトを実行する

sh secondstepshellscriptpath urtblname schema details urdelimiter hdfspath

上記のアプローチを使用すると、任意の数の列のテーブルを作成でき、再利用性が高くなります。

ここでは、以下のような出力を生成する他のツールを使用してスキーマを準備します..

"col1 string,sol2 string,col3 string,col4 string etc..."

たとえば、ユーザーから動的に列数を取得することにより、シェルスクリプト内で上記の出力を生成できます。また、2番目のステップ自体からそのスキーマを直接渡すことができます。

于 2013-07-31T06:48:42.247 に答える