CREATE TABLE со столбцами путем расширения (и объединения) структуры в другой таблице - PullRequest
0 голосов
/ 29 января 2020

table1 имеет структуру:

DESCRIBE table1;
+-------------+------------------------------------------------------------------------+
|  col_name   |                              data_type                                 |
+-------------+------------------------------------------------------------------------+
| key         | string                                                                 |
| source      | string                                                                 |
| address     | struct<address:string,zip:string,city:string,state:string,cntry:string>|
| column4     | date                                                                   |
| column5     | date                                                                   | 
+-------------+------------------------------------------------------------------------+

Первые две строки table1:

SELECT * FROM db.table1 limit 2;
+------+----------+-------------------------------------------------------------------------------------+--------------------+------------+--+
| key  | source   |                                         address                                     | column4            | column5    |
+------+----------+-------------------------------------------------------------------------------------+--------------------+------------+--+
| 001  | internet | {"address":" 123 FAKE ST","zip":"12345","city":"MIAMI","state":"FL","cntry":"USA"}  | 2007-01-27         | 2009-12-12 |
| 002  | internet | {"address":" 234 FAKE ST","zip":"23456","city":"MIAMI","state":"FL","cntry":"USA"}  | 2012-03-23         | 2014-01-30 |
+------+----------+-------------------------------------------------------------------------------------+--------------------+------------+--+

Я хочу создать новый table2, в который я копирую table1, но разверните структуру в столбце address в ее пять составляющих столбцов (address, zip, city, state, cntry) и затем создайте столбец, который будет объединение address и zip.

Я пытался:

CREATE TABLE table2 AS 
(
    SELECT 
           key, source, 
           address.address, address.zip, address.city, address.state, address.cntry,
           CONCAT(address.address, ' ', address.zip), 
           column4, column5 
    FROM 
           db.table1
);

Но это дало мне ошибку Error: Error while compiling statement: FAILED: ParseException line 1:35 cannot recognize input near '(' 'select' 'key' in select clause (state=42000,code=40000)

table2 должно иметь структура:

DESCRIBE table2;
+-------------+------------------------------------------------------------------------+
|  col_name   |                              data_type                                 |
+-------------+------------------------------------------------------------------------+
| key         | string                                                                 |
| source      | string                                                                 |
| address     | string                                                                 |
| zip         | string                                                                 |
| city        | string                                                                 |
| state       | string                                                                 |
| cntry       | string                                                                 |
| add_zip     | string                                                                 |
| column4     | date                                                                   |
| column5     | date                                                                   | 
+-------------+------------------------------------------------------------------------+

и содержит все данные из table1.

Честно говоря, я не уверен, что это правильный путь к go по поводу разделения этого struct, поэтому любая помощь будет очень полезна.

1 Ответ

2 голосов
/ 29 января 2020

key - это неправильное имя для столбца, потому что это ключевое слово SQL. Видимо, круглые скобки являются причиной проблемы. Кроме того, у вас отсутствует имя столбца для вычисляемого столбца.

Это работает?

CREATE TABLE table2 AS 
    SELECT key, source, 
           address.address, address.zip, address.city, address.state, address.cntry,
           CONCAT(address.address, ' ', address.zip) as address_zip, 
           column4, column5 
    FROM db.table1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...