小编Bra*_*vis的帖子

在 bigquery 的 bq 命令行工具中转义查询的引号字符

我也尝试使用 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)

escaping google-bigquery

8
推荐指数
2
解决办法
3万
查看次数

多个RowSideColor列来自gplots包的heatmap.2

我希望能够使用两个RowSideColor条与R包图中的heatmap.2函数,但我无法弄清楚如何做到这一点.我已经在堆栈溢出之前看到过这个问题,并且在回答问题的同时,回复没有解决这个问题.将因子添加到输入数据矩阵将不起作用,因为它会影响层次聚类的结果.如果有必要,我愿意使用其他类似热图的功能来实现我的目标.

谢谢,布拉德

r gplots

7
推荐指数
1
解决办法
6249
查看次数

在bigquery中连接多个表

我希望能够在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)

google-bigquery

4
推荐指数
2
解决办法
8596
查看次数

使用ggplot2绘制颜色编码的世界地图

我正在尝试生成生成世界地图的图,其中每个国家/地区的颜色对应于存储在数据框中的特定值.

> 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.所以这是一个完全不同的问题.

plot r ggplot2 rworldmap

3
推荐指数
1
解决办法
1万
查看次数

组合两个多个 bigquery SELECT FROM 语句

我对 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 google-bigquery

3
推荐指数
1
解决办法
3448
查看次数

如何使用python API在bigquery中创建新视图?

我有一些代码可以自动生成一堆不同的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查询.所以我明白为什么那些是制作视图所必需的,但我不理解其他部分.

你能帮我理解这些细节吗?

谢谢,布拉德

python google-bigquery

3
推荐指数
3
解决办法
3091
查看次数

如何展开多级熊猫数据框

我有一个包含三列的 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)

python dataframe pandas

3
推荐指数
1
解决办法
49
查看次数

使用postgresql 9.4访问JSON的更深层元素

我希望能够访问存储在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)

postgresql json

1
推荐指数
1
解决办法
1517
查看次数

在python中的列表列表上执行行总和和列总和

我想在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。

谁能帮我吗?

python

0
推荐指数
1
解决办法
2094
查看次数