我也尝试使用 bq 命令行自动生成新的每日表
bq query \
--destination_table=<destination> \
--allow_large_results \
--noflatten_results \
'<query>'
Run Code Online (Sandbox Code Playgroud)
下面给出了哪里。问题在于sql查询中存在一堆单引号和双引号,并且bq命令行工具也是使用单引号来划分要执行的查询。
所以我知道问题是我必须转义引号,但我不知道该怎么做。我尝试将查询中的单引号替换为“\'”(不带双引号),但这没有帮助,而且似乎是合乎逻辑的做法。我认为有一些明显我没有做的事情,所以希望有人可以帮助我,而不需要做很多工作。
SELECT
time,
userId,
deviceId,
systemName,
LEFT(systemVersion,3) AS systemVersionMajor,
systemVersion AS systemVersionMinor,
deviceModel,
appVersion,
country,
city,
firstRun,
priorTimeSpentInApp,
priorSessions,
priorEvents,
event_name,
event_info,
event_time,
event_value,
MAX(CASE WHEN user_attribute.Name = 'Gen_Total_Sessions' THEN FLOAT(user_attribute.Value) END) AS Gen_Total_Sessions.attr,
MAX(CASE WHEN user_attribute.Name = 'Gen_Last_Achievement' THEN STRING(user_attribute.Value) END) AS Gen_Last_Achievement.attr,
MAX(CASE WHEN event_parameters.Name = 'Gamemode' THEN STRING(event_parameters.Value) END) AS Gamemode.param,
MAX(CASE WHEN event_parameters.Name = 'Player_Level' THEN FLOAT(event_parameters.Value) END) AS Player_Level.param,
FROM
TABLE_QUERY([projectId:dataSet], …Run Code Online (Sandbox Code Playgroud) 我希望能够使用两个RowSideColor条与R包图中的heatmap.2函数,但我无法弄清楚如何做到这一点.我已经在堆栈溢出之前看到过这个问题,并且在回答问题的同时,回复没有解决这个问题.将因子添加到输入数据矩阵将不起作用,因为它会影响层次聚类的结果.如果有必要,我愿意使用其他类似热图的功能来实现我的目标.
谢谢,布拉德
我希望能够在bigquery中加入多个表.加入两个是非常微不足道的.
SELECT
t1.field1 AS field1,
t2.field2 AS field2,
t1.field3 AS field3
FROM [datasetName.tableA] t1
JOIN [datasetName.tableB] t2
ON t1.somefield = t2.anotherfield
Run Code Online (Sandbox Code Playgroud)
但是,如果我想加入三张或更多桌子怎么办?我可以这样做吗?
SELECT
t1.field1 AS field1,
t2.field2 AS field2,
t1.field3 AS field3,
t3.field4 as field4
FROM [datasetName.tableA] t1
JOIN [datasetName.tableB] t2
JOIN [datasetName.tableC] t3
ON t1.somefield = t2.anotherfield AND t1.somefield=t3.yetanotherfield
Run Code Online (Sandbox Code Playgroud)
我试过了,但它不起作用.我想我需要做点什么
SELECT
t12.field1 as field1,
t12.field2 as field2,
t3.field3 as field3,
FROM
(SELECT
t1.field1 AS field1,
t2.field2 AS field2,
t1.field3 AS field3
FROM [datasetName.tableA] t1
JOIN [datasetName.tableB] t2
ON t1.somefield …Run Code Online (Sandbox Code Playgroud) 我正在尝试生成生成世界地图的图,其中每个国家/地区的颜色对应于存储在数据框中的特定值.
> aggregated_country_data
country num_responses region
1 AL 1 Albania
2 AM 1 Armenia
3 AR 32 Argentina
...
75 ZW 3 Zimbabwe
Run Code Online (Sandbox Code Playgroud)
这就是我尝试过的
library(rworldmap)
library(ggplot2)
map.world <- map_data(map="world")
gg <- ggplot()
gg <- gg + theme(legend.position="none")
gg <- gg + geom_map(data=map.world, map=map.world, aes(map_id=region, x=long, y=lat), fill="white", colour="black", size=0.25)
gg
Run Code Online (Sandbox Code Playgroud)
这绘制了世界地图就好了,接下来我想为每个国家添加颜色,与aggregated_country_data中的'num_responses'值成比例
gg <- gg + geom_map(data=aggregated_country_data, map=map.world, aes(map_id=region, fill=num_responses), color="white", size=0.25)
gg
Run Code Online (Sandbox Code Playgroud)
但是现在它对每种颜色进行颜色编码,因为它们对应于国家/地区代码,而不是在aggregated_country_data中列num_responses中的值.
很明显,我没有得到关于ggplot2的东西,但我无法弄清楚那是什么.
我很感激任何投入,布拉德
我弄清楚问题是什么,它与ggplot2或我正在做的任何其他事情无关.aggregated_country_data数据框的"region"名称与map.world中的名称不同.我的输入数据(aggregated_country_data)默认使用两个字母的国家代码,我使用国家代码R包转换为国家名称(在数据框中称为"区域"),但它使用的名称的命名约定与map.world.所以这是一个完全不同的问题.
我对 BigQuery 和 SQL 有点陌生,所以我遇到的部分困难可能是我不知道如何描述我遇到的问题,以至于能够搜索答案,但我有看起来所以请温柔。
我想要做的是计算满足一组条件的唯一用户 ID 的总数,然后除以唯一用户 ID 的总数。
例如,要计算所有购买的唯一用户:
SELECT count(userId)
FROM (SELECT userId
FROM (FLATTEN([table1], user_attribute))
WHERE event_value > 0 and event_parameters.Name = "SKU"
GROUP BY userId ORDER BY userId)
Run Code Online (Sandbox Code Playgroud)
并计算唯一用户的总数
SELECT count(userId)
FROM (SELECT userId
FROM (FLATTEN([table1], user_attribute))
GROUP BY userId ORDER BY userId)
Run Code Online (Sandbox Code Playgroud)
我试图将查询写为
SELECT buyers/total
FROM (SELECT COUNT(userId) AS buyers
FROM (SELECT userId
FROM (FLATTEN([table1], user_attribute))
WHERE event_value > 0 and event_parameters.Name = "SKU"
GROUP BY userId ORDER BY userId),
COUNT(userId) as total
FROM …Run Code Online (Sandbox Code Playgroud) 我有一些代码可以自动生成一堆不同的SQL查询,我希望将这些查询插入到bigquery中以生成视图,但我遇到的一个问题是这些视图需要每晚动态生成,因为它们的性质会发生变化的数据.所以我希望能够使用google bigquery api for python来创建视图.我理解如何使用'bq'命令行工具来完成它,但我希望能够直接在代码中构建它,而不是使用shell来运行bq.我玩过提供的代码
https://cloud.google.com/bigquery/bigquery-api-quickstart
我不明白如何使用这段代码创建一个视图,而不是只返回SELECT语句的结果.我可以在这里看到有关执行表插入的文档
https://cloud.google.com/bigquery/docs/reference/v2/tables/insert
但这指的是使用REST API生成新表,而不是上面提供的示例.
这是不可能的吗?我应该让步并使用bq吗?
谢谢
***针对费利佩的评论提出了一些其他问题.
表资源文档表明存在许多必填字段,其中一些字段即使我不完全理解它们要求的内容也是有意义的,其他字段则没有.例如,externalDataConfiguration.schema.这是指我正在连接的数据库的模式(我认为是这样),还是用于存储数据的模式?
那么externalDataConfiguration.sourceFormat呢?由于我正在尝试查看预先存在的数据库,因此我不确定我是否了解源格式的相关性.它是我正在制作视图的数据库的源格式吗?我该如何识别?
和externalDataConfiguration.sourceUris [],我没有将新数据导入数据库,所以我不明白这个(或前一个元素)是如何需要的.
架构怎么样?
tableReference.datasetId,tableReference.projectId和tableReference.tableId是不言自明的.
类型将是view,view.query将是用于生成视图的实际sql查询.所以我明白为什么那些是制作视图所必需的,但我不理解其他部分.
你能帮我理解这些细节吗?
谢谢,布拉德
我有一个包含三列的 Pandas 数据框,前两列是因子,第三列包含计数。我想“爆炸”或“展开”数据框,以便第一列、第二列的每个唯一元素没有一行,而是行数等于计数列的总和,其中每条新行都有一个唯一且递增的标识符号,但我希望两列之一中的每个级别都有一个单独的计数器。请注意,此问题类似于如何“展开”熊猫数据框?我昨天问过,但有一些额外的并发症,我第一次没有认识到,我无法概括(为我自己)如何扩展它。
这是数据框
data = [['van', 'bc', 1], ['abb', 'bc', 3], ['vic','bc',3], ['cal', 'ab', 1], ['edm', 'ab', 2], ['cal','ab', 2], ['van', 'bc', 1]]
df = pd.DataFrame(data, columns = ['city', 'state', 'count'])
Run Code Online (Sandbox Code Playgroud)
我想把它变成这个
data = [['van', 'bc', 'dr0001'], ['abb', 'bc', 'dr0002'], ['abb', 'bc', 'dr0003'], ['abb', 'bc', 'dr0004'], ['vic', 'bc', 'dr0005'], ['vic', 'bc', 'dr0006'], ['vic', 'bc', 'dr0007'], ['cal', 'ab', 'dr0001'], ['edm', 'ab', 'dr0002'], ['edm', 'ab', 'dr0003'], ['edm', 'ab', 'dr0004'], ['edm', 'ab', 'dr0005'], ['van', 'bc', 'dr0008']]
df = pd.DataFrame(data, columns …Run Code Online (Sandbox Code Playgroud) 我希望能够访问存储在postgresql数据库中的字段json中存储在json中的更深层元素.例如,我希望能够从下面提供的json访问遍历路径states-> events-> time的元素.这是我正在使用的postgreSQL查询:
SELECT
data#>> '{userId}' as user,
data#>> '{region}' as region,
data#>>'{priorTimeSpentInApp}' as priotTimeSpentInApp,
data#>>'{userAttributes, "Total Friends"}' as totalFriends
from game_json
WHERE game_name LIKE 'myNewGame'
LIMIT 1000
Run Code Online (Sandbox Code Playgroud)
这是来自json字段的示例记录
{
"region": "oh",
"deviceModel": "inHouseDevice",
"states": [
{
"events": [
{
"time": 1430247045.176,
"name": "Session Start",
"value": 0,
"parameters": {
"Balance": "40"
},
"info": ""
},
{
"time": 1430247293.501,
"name": "Mission1",
"value": 1,
"parameters": {
"Result": "Win ",
"Replay": "no",
"Attempt Number": "1"
},
"info": ""
}
]
}
],
"priorTimeSpentInApp": …Run Code Online (Sandbox Code Playgroud) 我想在python中计算矩阵的行和和列和;但是,由于信息安全要求,我不能使用任何外部库。所以为了创建一个矩阵,我使用了一个列表列表,如下所示:
matrix = [[0 for x in range(5)] for y in range(5)]
for pos in range(5):
matrix[pos][pos]=1
matrix[2][2]= 0
Run Code Online (Sandbox Code Playgroud)
现在我想做的是执行矩阵的行和和列和。我知道如何进行行求和,这很容易:
sum(matrix[0])
Run Code Online (Sandbox Code Playgroud)
但是如果我想做一个列总和怎么办?有没有更优雅和 Pythonic 的方式来完成它,而不是用 for 循环强制执行它,一个 la
sumval = 0
for pos in range(len(matrix[0])):
sumval = matrix[pos][0] + sumval
Run Code Online (Sandbox Code Playgroud)
这会起作用,但它根本不是pythonic。
谁能帮我吗?