私はHiveとStack Overflowを初めて使用します。複雑なデータ型 "STRUCT"のテーブルを作成し、HiveのINSERT INTO TABLE
を使用してテーブルに入力しようとしています。
次のコードを使用しています。
CREATE TABLE struct_test
(
address STRUCT<
houseno: STRING
,streetname: STRING
,town: STRING
,postcode: STRING
>
);
INSERT INTO TABLE struct_test
SELECT NAMED_STRUCT('123', 'GoldStreet', London', W1a9JF') AS address
FROM dummy_table
LIMIT 1;
次のエラーが発生します。
ステートメントのコンパイル中にエラーが発生しました:失敗:semanticException [エラー10044]:列番号タイプが異なるため、ターゲットに挿入できません 'struct_test':列0をstructからarray>に変換できません。
同様のコードを使用してデータ型配列の作成とデータ入力に成功しましたが、Structで問題が発生しています。私はオンラインで見つけたコード例をたくさん試しましたが、どれも私のために機能していないようです...私は今しばらくそれにこだわっていたので、これに関するいくつかの助けに本当に感謝します!ありがとう。
あなたのSQLエラー。あなたはsqlを使うべきです:
INSERT INTO TABLE struct_test
SELECT NAMED_STRUCT('houseno','123','streetname','GoldStreet', 'town','London', 'postcode','W1a9JF') AS address
FROM dummy_table LIMIT 1;
複合データ型をHiveに直接挿入することはできません。構造体を挿入するには、named_struct関数を使用します。目的のテーブルのStructs列に挿入するデータを含むダミーテーブルを作成する必要があります。あなたの場合のように、ダミーテーブルを作成します
CREATE TABLE DUMMY ( houseno: STRING
,streetname: STRING
,town: STRING
,postcode: STRING);
次に、目的のテーブルに挿入するには
INSERT INTO struct_test SELECT named_struct('houseno',houseno,'streetname'
,streetname,'town',town,'postcode',postcode) from dummy;
ダミーテーブルを作成する必要はありません。コマンドを使用するだけです。
insert into struct_test
select named_struct("houseno","house_number","streetname","xxxy","town","town_name","postcode","postcode_name");
可能です:
ダミーまたは他のテーブルの文で列名を指定する必要があります。
INSERT INTO TABLE struct_test
SELECT NAMED_STRUCT('houseno','123','streetname','GoldStreet', 'town','London', 'postcode','W1a9JF') AS address
FROM dummy
または
INSERT INTO TABLE struct_test
SELECT NAMED_STRUCT('houseno',tb.col1,'streetname',tb.col2, 'town',tb.col3, 'postcode',tb.col4) AS address
FROM table1 as tb