web-dev-qa-db-ja.com

配列複合型列に値を挿入するハイブ

Insert intoステートメントを使用して、配列列を含むテーブルにデータを追加できません。データ型は配列<varchar(200)>です。

Jodbcを使用すると、次のような値で配列列に値を挿入できません。

INSERT INTO demo.table (codes) VALUES (['a','b']);

「[」または「{」記号を認識しません。

次のような配列関数を使用する...

INSERT INTO demo.table (codes) VALUES (array('a','b'));

配列関数を使用すると、次のエラーが発生します。

Unable to create temp file for insert values Expression of type TOK_FUNCTION not supported in insert/values

回避策を試しました...

INSERT into demo.table (codes) select array('a','b');

失敗しました:

Failed to recognize predicate '<EOF>'. Failed rule: 'regularBody' in statement

Jdbcを使用して配列データを列にロードするにはどうすればよいですか?

9
Salvador Aceves

私のテーブルには2つの列があります:a STRING, b ARRAY<STRING>

@Kishore Kumar Sutharの方法を使用すると、次のようになります。

FAILED: ParseException line 1:33 cannot recognize input near '(' 'a' ',' in statement

しかし、私は別の方法を見つけました、そしてそれは私のために働きます:

INSERT INTO test.table 
SELECT "test1", ARRAY("123", "456", "789") 
FROM dummy LIMIT 1;

dummyは、少なくとも1行あるテーブルです。

5
White

少なくともone rowを持つdummyテーブルを作成します。

INSERT INTO demo.table (codes) VALUES (array('a','b')) from dummy limit 1;

Hive> select codes demo.table;
OK
["a","b"]
Time taken: 0.088 seconds, Fetched: 1 row(s)
2
Kishore

フィールド[〜#〜] id [〜#〜]およびNameを含むテーブルemployeeがあるとします。

フィールド[〜#〜] id [〜#〜]およびAddressを持つ別のテーブルemployee_addressを作成します。アドレスは、タイプarray(string)の複合データです。

値を挿入する方法は次のとおりです。

insert into table employee_address select 1, 'Mark', 'Evans', ARRAY('NewYork','11th 
avenue') from employee limit 1;

ここでは、テーブルの従業員はダミーテーブルとして機能します。そこからデータはコピーされません。そのスキーマはemployee_addressと一致しない可能性があります。それは問題ではありません。

0