回答
不知何故,Pentium10提出的选项在GBQ UI或API Explorer中从未为我工作过。
我可能失去了一些东西
与此同时,我找到了解决方法是在下面的例子
SELECT location.state, location.city FROM JS(
( // input table
SELECT NEST(CONCAT(state, ',', city)) AS locations
FROM (
SELECT state, city FROM
(SELECT 'florida' AS state, 'miami' AS city),
(SELECT 'california' AS state, 'la' AS city),
(SELECT 'romania' AS state, 'transylvania' AS city)
)
),
locations, // input columns
"[ // output schema
{'name': 'location', 'type': 'RECORD',
'mode': 'REPEATED',
'fields': [
{'name': 'state', 'type': 'STRING'},
{'name': 'city', 'type': 'STRING'}
]
}
]",
"function(row, emit){ // function
for (var i = 0; i < row.locations.length; i++) {
var c = [];
x = row.locations[i].split(',');
t = {state:x[0], city:x[1]}
c.push(t);
emit({location: c});
};
}"
)
请注意:
你应该设定目标表与Allow Large Results
和未选中Flatten Results
结果输出表是(在JSON模式下)
[
{
"location": [
{
"state": "california",
"city": "la"
}
]
},
{
"location": [
{
"state": "florida",
"city": "miami"
}
]
},
{
"location": [
{
"state": "romania",
"city": "transylvania"
}
]
}
]
加入到解决一些问题@AdiCohen与他的真实的例子, 他在最近的评论表明:
问:我有查询等栏目除了记录列,但是当我跑 查询,他们返回为null。我怎样才能创建一个与 类型的表?这里
SELECT amount, currency, location.state, location.city FROM JS(
(// input table
SELECT NEST(CONCAT(state, ',', city)) AS locations,
SUM(amount) AS amount, MAX(currency) as currency
FROM (
SELECT state, city, amount, currency, ROW_NUMBER() OVER() as grp FROM
(SELECT 'florida' AS state, 'miami' AS city, 'coins' AS currency, 40 AS amount),
(SELECT 'california' AS state, 'la' AS city, 'coins' AS currency, 40 AS amount),
(SELECT 'romania' AS state, 'transylvania' AS city,'coins' AS currency, 40 AS amount)
) GROUP BY grp
),
amount, currency, locations, // input columns
"[ // output schema
{'name': 'location', 'type': 'RECORD', 'mode': 'REPEATED',
'fields': [
{'name': 'state', 'type': 'STRING'},
{'name': 'city', 'type': 'STRING'}
] },
{ 'name': 'amount', 'type': 'INTEGER'},
{ 'name': 'currency', 'type': 'STRING'}
]",
"function(row, emit) { // function
for (var i = 0; i < row.locations.length; i++) {
var c = [];
x = row.locations[i].split(',');
t = {state:x[0], city:x[1]}
c.push(t);
emit({amount: row.amount, currency: row.currency, location: c});
};
}"
)
输出是:
[
{
"amount": "40",
"currency": "coins",
"location_state": "romania",
"location_city": "transylvania"
},
{
"amount": "40",
"currency": "coins",
"location_state": "florida",
"location_city": "miami"
},
{
"amount": "40",
"currency": "coins",
"location_state": "california",
"location_city": "la"
}
]
非常感谢!它确实有帮助。我在哪里可以找到关于udf功能的更多内容? –
https://cloud.google.com/bigquery/user-defined-functions –
重要的是,您可以使用投票下方发布的答案左侧的勾号标记接受的答案。请参阅http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235为什么它很重要 –
您需要使用dot
符号,以反映输出作为RECORD
例如查询:
select
'florida' as country.state,
'SFO' as country.city;
在这个例子中country
是记录和state|city
都在记录中的字段。
请澄清 - 这应该与BQ UI一起工作吗?或API资源管理器 - https://cloud.google.com/bigquery/docs/reference/v2/jobs/insert#try-it?以上提议从未在BQ UI中为我工作!你能举例说明使用API Explorer的工作设置吗?会非常有帮助! –
这个答案直接来自@MoshaPasumansky的支付谷歌支持谁提供了我们发布几个月前的票的答案 – Pentium10
所以,看起来它不起作用?你有没有尝试过? –
- 1. 创建引用类型的列表
- 2. 使用泛型的类创建阵列
- 3. 使用型号列表创建记录
- 4. 获取枚举类型并创建该类型的列表,获取类类型并使用该类型创建具有反射的列表
- 5. 如何使用动态对象类型创建通用列表
- 6. 创建一个从类型级列表
- 7. 创建类型列表的视图2
- 8. 创建变量类型列表
- 9. 创建动态类型列表
- 10. F#从列表中创建类型
- 11. 创建类型的列表customType
- 12. 创建泛型类的列表
- 13. 如何创建匿名类型列表?
- 14. 使用linq创建分类列表
- 15. 使用类创建Scala列表
- 16. 如何使用符号创建类型级别列表以测试类型族
- 17. 如何使用DBAdapter中的BLOB类型列创建表
- 18. 使用CustomClass类型的属性创建列表IEnumerable <CustomClass>?
- 19. 如何创建和使用“customClass”类型的列表
- 20. 类型球拍:使用定义类型创建通用类型
- 21. 的LINQ从其他类型的列表创建一些类型的列表
- 22. 通用HtmlHelper从任何类型的列表创建HTML表
- 23. 过程 - 创建引用其他表列类型的表
- 24. 创建泛型列表
- 25. 创建一个通用类型的通用列表
- 26. 创建使用列表
- 27. 使用csv.reader创建列表()
- 28. 使用Xml创建列表
- 29. Java用GridLayout创建表单类型?
- 30. 在Python中使用类型类创建一个类型类
你有一个率低。重要的是,您必须使用投票下方发布答案左侧的勾号标记接受的答案。这会增加你的速度。通过visinting这个链接看看这是如何工作的:http://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer-work#5235 – Pentium10