我有两个未分区的表:
q)s:([] date:(2019.07.01;2019.07.01;2019.07.02;2019.07.01;2019.07.05); co:`a`b`f`b`c)
q)t:([] date:(2019.07.01;2019.07.01;2019.07.02;2019.07.01;2019.07.07); co:`a`b`e`b`d)
在上面的表中,当我在下面的查询中运行时,它运行正常。
q)select distinct co from s,t where date within 2019.07.01 2019.07.02
co
--
a
b
f
e
我有按日期分区的同名表,当我尝试对分区表运行相同的查询时,出现以下错误:
ERROR: 'par
(trying to update a physically partitioned table)
我认为这是蛮力的解决2问题的方法:
select distinct co from((select distinct co from s where date within 2019.07.01 2019.07.02),select distinct co from t where date within 2019.07.01 2019.07.02)
答案 0 :(得分:1)
我假设您仅在源表中包括日期名称以协助查询。日期分区表将从hdb结构生成虚拟日期列,您不应将其包括在要写入的实际表中。
- 为什么在分区表中出现上述错误?
除了通过初始的select语句外,没有其他方法可以避免访问分区表的数据。。在这种情况下,您直接尝试对,
和s
表执行t
操作
- 获得与未分区表中相似的输出的优化方法是什么?
通常,表的大小与操作的性质和频率之间可能需要权衡取舍,有时可能需要将表存储到内存中以进行频繁的连接,或者使用以下命令创建顶级平面表:相关的数据子集。
如果这只是用于较大操作的通用测试用例,那么以下内容将是理想的选择
distinct raze {select distinct co from x where date within 2019.07.01 2019.07.02} each `s`t
此性能与您自己的查询并没有很大不同,但是只是更加简洁。