google-bigquery - 分区表 - 空或不存在
问题描述
最近,我一直致力于使用摄取时间将日期后缀表转换为分区表。但是,在分区表中,我们如何知道某个日期是否没有数据或者表没有创建成功呢?
这里有更多细节,
- 以前,创建了每日表,但是由于没有结果符合条件,某些表为空是可以的。例如,
daily_table_20200601 (100 rows)
daily_table_20200602 (0 rows)
daily_table_20200603 (10 rows)
在这种情况下,我可以看到表daily_table_20200602
存在,所以我知道我的计划作业运行成功。
- 当使用摄取时间切换到分区表时,我
daily_table
每天都在写入表,例如,
daily_table$20200601 (100 rows)
daily_table$20200602 (0 rows)
daily_table$20200603 (10 rows)
但是我们怎么知道表daily_table$20200602
是创建成功还是只是空的呢?
此外,还有一些有趣的事情。我正在使用 API 检查分区表是否存在,请参见以下代码,
dataset_ref = client.dataset('dataset_name')
table_ref = dataset_ref.table("daily_table$20210101")
client.get_table(table_ref)
结果显示该表存在。那么我们是否能够检查某个日期表是否存在?
解决方案
每个分区没有单独的(日期表),因为分区不会创建单独的分区表,它类似于关系数据库分区
摄取时间分区方法为日分区(_PARTITIONTIME,_PARTITIONDATE)和每小时分区(_PARTITIONTIME)添加了一个伪列,其中将包含插入数据或小时开始的时间戳并相应地对表进行分区,
对于此代码:
dataset_ref = client.dataset('dataset_name')
table_ref = dataset_ref.table("daily_table$20210101")
client.get_table(table_ref)
只要分区表存在,这就会成功
推荐阅读
- python - FFMPEG/tensorflow 扭曲 .mp4,没有可观察到的相关模式
- powershell - 如何从可变输入对象构造新数组
- java - 从 Nexus 下载工件时,主机中的软件中止了已建立的连接
- mysql - 无法从 docker 容器中连接到 mysql
- angular - Angular 4 如何在 BrowserStack 中运行 Protactor
- inno-setup - 3 个程序的一个安装程序
- reactjs - 在 Gatsby 中以编程方式限制路线
- python - 迭代numpy数组的函数
- c# - 处理 SelectionChanged 和 MouseDown
- less-unix - 使用较少时如何转到第一个匹配的行