我试图复制这个给定的模式:
+---------------+-----------------------------------------------------------------------+
| column | type |
+---------------+-----------------------------------------------------------------------+
| first_name | STRING |
| last_name | STRING |
| subscriptions | MAP<STRING, MAP <titles:ARRAY<STRING>, payment_methods:ARRAY<STRING>> |
在此声明中:
CREATE TABLE IF NOT EXISTS mydb.map1 (
first_name STRING,
last_name STRING,
subscriptions MAP < MAP < STRING, ARRAY<STRING> >, MAP < STRING, ARRAY<STRING> >>
)
我设法写了这个模式。但老实说,我不能百分之百确定它是否反映了这个模式。我最困惑的是这部分:“Maptitles:array<string“什么是”标题:“?这似乎是关键?
+---------------+----------------------------------------------------------+
| col_name | data_type |
+---------------+----------------------------------------------------------+
| first_name | string |
| last_name | string |
| subscriptions | map<map<string,array<string>>,map<string,array<string>>> |
# Partitioning
Not partitioned
所以我试着用这个insert语句来测试它:
%sql
INSERT INTO
mydb.map1
VALUES
('String1', 'String2', Map( Map('titles', Array('S1', 'S2', 'S3')), Map('payment_methods', Array('S1', 'S2', 'S3'))))
但这只是给了我一个错误陈述,我被困在这里:
Error in SQL statement: AnalysisException: cannot resolve 'map(map('titles', array('S1', 'S2', 'S3')), map('payment_methods', array('S1', 'S2', 'S3')))' due to data type mismatch: The key of map cannot be/contain map.; line 9 pos 2;
如何编写create语句来获得上述给定的模式?
1条答案
按热度按时间ki0zmccv1#
坦率地说,您的create table并不完全正确。我不明白
subscriptions
字段MAP<STRING, MAP <titles:ARRAY<STRING>, payment_methods:ARRAY<STRING>>
Map中可能有命名字段-Map定义支持任意键,而不仅仅是特定键。如果你想做到这一点,那么最好使用
struct
作为Map的值,请尝试以下操作:真正的问题是您声明了一个Map,其中键和值都是Map。如果仍要使用Map,则需要按以下方式声明: