10

次のチュートリアルに基づいて、Hive にはマップ タイプがあります。SELECTただし、 UDF または組み込み関数を使用して、新しいキーと値のペアを Hive マップに挿入する方法が文書化されていないようです。これは可能ですか?

foo明確にするために、単一の列 typed map、 namedで呼び出されるテーブルがあるとしますcolumn_containing_map

ここで、 typed という 1 つの列を持つ新しいテーブルを作成したいと考えていますが、map各マップ (単一の列に含まれる) に追加のキーと値のペアを持たせたいと考えています。

クエリは次のようになります。

CREATE TABLE IF NOT EXISTS bar AS
SELECT ADD_TO_MAP(column_containing_map, "NewKey", "NewValue") 
FROM foo;

次に、テーブルにはテーブルbarと同じマップが含まれますが、foo各マップにbarは追加のキーと値のペアがあります。

4

4 に答える 4

6

さまざまな科目の学生のマークを含む学生テーブルがあるとします。

hive> desc student;
id                      string
name                    string
class                    string
marks                   map<string,string>

以下のように、値をテーブルに直接挿入できます。

INSERT INTO TABLE student
SELECT STACK(1,
'100','Sekar','Mathematics',map("Mathematics","78")
)
FROM empinfo 
LIMIT 1;

ここで、「empinfo」テーブルは、データベース内の任意のテーブルにすることができます。結果は次のとおりです。

100     Sekar   Mathematics     {"Mathematics":"78"}
于 2015-11-24T11:19:01.153 に答える
0

ブリックハウスのコンバイン機能が必要なことをしてくれると思います。元の質問のクエリを少し変更すると、次のようになります

SELECT 
    combine(column_containing_map, str_to_map("NewKey:NewValue")) 
FROM 
    foo;

この例の制限は、str_to_map が MAP< STRING,STRING > を作成することです。ハイブ マップにキーまたは値の他のプリミティブ型が含まれている場合、これは機能しません。

于 2015-08-18T19:44:33.090 に答える
0

よくわかりませんでした。UDF または組み込み関数とはどういう意味ですか? Mapフィールドを持つテーブルに挿入する場合は、他のデータ型と同様です。例えば ​​:

次のように作成されたcomplex1というテーブルがあります。

CREATE TABLE complex1(c1 array<string>, c2 map<int,string> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY '-' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n';

これを含むcom.txtというファイルもあります: Mohammad-Tariq,007:Bond

次に、このデータを上記で作成したテーブルにロードします。

パス '/inputs/com.txt' 内のデータをテーブル complex1 にロードします。

したがって、この表には以下が含まれます。

* 複合体 1 から選択します。

わかった

["モハマド","タリク"] {7:"絆"}

かかった時間: 0.062 秒

complex2 という名前のテーブルがもう 1 つあります。

CREATE TABLE complex2(c1 map<int,string>);

次に、complex1 からデータを選択して complex2 に挿入するには、次のようにします。

テーブル complex2 に挿入し、complex1 から c2 を選択します。

テーブルをスキャンしてクロス チェックします。

* 複合体 2 から選択します。

わかった

{7:"絆"}

かかった時間: 0.062 秒

HTH

于 2013-08-22T19:45:41.580 に答える