我正在尝试将字符串转换为SQL中的时间戳。问题真的很简单,如何将这个字符串转换为从当天的午夜开始的时间戳?
在我的数据库中,我还存储了一个字段timestamp_micros,这些字段中的任何一个都可以工作,并且我认为将micros转换为时间戳会比字符串更容易。
例如
20170118 => timestamp
查询:
WITH allTables as (
SELECT
event.date as date,
count(*) as totalSessions,
count(DISTINCT user_dim.app_info.app_instance_id) as uniqueUsers
FROM `namehiddenonlyhere.*`
CROSS JOIN
UNNEST(event_dim) AS event
WHERE
event.name = 'session_start'
AND
event.date <= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
AND
event.date >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY))
GROUP BY event.date
UNION ALL
SELECT
event.date as date,
count(*) as totalSessions,
count(DISTINCT user_dim.app_info.app_instance_id) as uniqueUsers
FROM `namehiddenonlyhere.*`
CROSS JOIN
UNNEST(event_dim) AS event
WHERE
event.name = 'session_start'
AND
event.date …Run Code Online (Sandbox Code Playgroud) 我有2个表,两个表都包含不同的id值.某些id值可能出现在两个表中,有些值对于每个表都是唯一的.Table1有10,910行,Table2有11,304行
运行左连接查询时:
SELECT COUNT(DISTINCT a.id)
FROM table1 a
JOIN table2 b on a.id = b.id
Run Code Online (Sandbox Code Playgroud)
我在两个表中共享了10,896行或10,896个ID.
但是,当我FULL OUTER JOIN在这两个表上运行时:
SELECT COUNT(DISTINCT a.id)
FROM table1 a
FULL OUTER JOIN EACH table2 b on a.id = b.id
Run Code Online (Sandbox Code Playgroud)
我总共获得了10,896行,但我期待来自table1的所有10,910行.
我想知道我的查询语法是否存在问题.
我想设置到 BigQuery 的 GA 导出。我正在按照此处所述的步骤操作。在步骤 2.5 中,它指出:
将服务帐号添加到您的项目中。
将 analytics-processing-dev@system.gserviceaccount.com 添加为项目成员,并确保项目级别的权限设置为编辑器(与 BigQuery 数据编辑器相反)。需要编辑者权限才能将数据从 Analytics 导出到 BigQuery。
但是,我不愿意为我的项目提供这种提升的权限(“项目编辑器”将允许完全访问我项目中的所有资源)。
为什么 GA 导出需要如此提升的权限才能与 BigQuery 对话,有没有办法为服务帐户提供最低权限?
给定如下数据集
{"slot":"reward","result":1,"rank":1,"isLandscape":false,"p_type":"main","level":1276,"type":"ba","seqNum":42544}
{"slot":"reward_dlg","result":1,"rank":1,"isLandscape":false,"p_type":"main","level":1276,"type":"ba","seqNum":42545}
Run Code Online (Sandbox Code Playgroud)
我尝试通过过滤这些json数据type:ba并将其插入到使用python sdk的bigquery中
ba_schema = 'slot:STRING,result:INTEGER,play_type:STRING,level:INTEGER'
class ParseJsonDoFn(beam.DoFn):
B_TYPE = 'tag_B'
def process(self, element):
text_line = element.trip()
data = json.loads(text_line)
if data['type'] == 'ba':
ba = {'slot': data['slot'], 'result': data['result'], 'p_type': data['p_type'], 'level': data['level']}
yield pvalue.TaggedOutput(self.B_TYPE, ba)
def run():
parser = argparse.ArgumentParser()
parser.add_argument('--input',
dest='input',
default='data/path/data',
help='Input file to process.')
known_args, pipeline_args = parser.parse_known_args(argv)
pipeline_args.extend([
'--runner=DirectRunner',
'--project=project-id',
'--job_name=data-job',
])
pipeline_options = PipelineOptions(pipeline_args)
pipeline_options.view_as(SetupOptions).save_main_session = True
with beam.Pipeline(options=pipeline_options) as p:
lines = p | ReadFromText(known_args.input)
multiple_lines = ( …Run Code Online (Sandbox Code Playgroud) 我们在BigQuery中有一个大表,其中数据正在流入.每天晚上,我们都想运行处理过去24小时数据的Cloud Dataflow管道.
在BigQuery中,可以使用" 表装饰器 " 执行此操作,并指定我们想要的范围,即24小时.
从BQ表读取时,Dataflow中是否可以以某种方式实现相同的功能?
我们已经看过Dataflow 的' Windows '文档,但我们无法确定这是否是我们需要的.到目前为止我们想出了这个(我们希望最后24小时的数据使用FixedWindows),但它仍然试图读取整个表格:
pipeline.apply(BigQueryIO.Read
.named("events-read-from-BQ")
.from("projectid:datasetid.events"))
.apply(Window.<TableRow>into(FixedWindows.of(Duration.standardHours(24))))
.apply(ParDo.of(denormalizationParDo)
.named("events-denormalize")
.withSideInputs(getSideInputs()))
.apply(BigQueryIO.Write
.named("events-write-to-BQ")
.to("projectid:datasetid.events")
.withSchema(getBigQueryTableSchema())
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE) .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED));
Run Code Online (Sandbox Code Playgroud)
我们走在正确的轨道上吗?
我有一个看起来像这样的要求:
If X <0.01 then Y=1, Z=2
If X>=0.01 then
If <another_expression> then Y=3, Z=4
If <another_expression> then Y=5, Z=6
Run Code Online (Sandbox Code Playgroud)
依此类推,其中'Y'和'Z'是列别名.
我看过使用CASE语句,但它似乎不支持嵌套的 CASE语句.
我错过了一些明显的东西吗 或者有更好的方法来实现它吗?
我对使用视图将访问限制为仅对表的某些分区感兴趣。从视图中选择而不是直接从表中选择(响应时间缩短或数据使用量增加),我是否期望看到性能下降?数据是否必须选择两次?
查看查询:
SELECT
*
FROM
project:dataset.table
WHERE
_PARTITIONTIME between DATE_ADD(CURRENT_TIMESTAMP(), -1, "MONTH") and CURRENT_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud) 我可以创建用户定义的函数并计算给定月份的总天数.是否有直接的方法在给定日期内在给定月份内没有天数
例如.
select date_t, some_inbuilt_function_get_total_no_of_days_in_month(date_t)
Run Code Online (Sandbox Code Playgroud)
从给定日期开始有月份功能,同样有日期功能,所以我可以去月初.有日期差异功能,但没有办法到月底.
参考:https://cloud.google.com/bigquery/docs/reference/legacy-sql