Google-Bigquery:查询扫描整个表,而不是分区表中的给定范围



我有一个事实数据表,其中包含 5000 万条名为 AccountLines 的记录,按Posting_Date_New分区。当我过滤特定分区列上的记录时,我的查询工作正常,并且仅扫描给定范围之间的有限数据。但是当我根据Posting_Date_New列与维度表连接并按财政年度进行过滤时,它会扫描整个表。如何解决这个问题?我需要将事实数据表与维度表联接,并在不扫描整个表的情况下筛选维度表的列。请帮忙。

我的查询如下。

--查询完成(5.542 秒已用,已处理 244.37 MB(

select ah.ChargeGroup, sum(Amount) Amount from SSIS_STAGING.AccountLine acc
inner join SSIS_STAGING.Dim_Times_BI_Clustering dd on dd.Posting_Date_New = acc.Posting_Date_New
inner join SSIS_STAGING.BranchHierarchy br on br.CostCenterId = acc.BookingBranchID
inner join SSIS_STAGING.Accounts_Hierarchy ah on ah.Account = acc.G_L
where acc.Posting_Date_New between '2018-04-01' and '2019-03-31' and ZoneName = 'BU-North'
group by ah.ChargeGroup

--查询完成(16.530 秒过去,5.51 GB 已处理(

select ah.ChargeGroup, sum(Amount) Amount from SSIS_STAGING.AccountLine acc
inner join SSIS_STAGING.Dim_Times_BI_Clustering dd on dd.Posting_Date_New = acc.Posting_Date_New
inner join SSIS_STAGING.BranchHierarchy br on br.CostCenterId = acc.BookingBranchID
inner join SSIS_STAGING.Accounts_Hierarchy ah on ah.Account = acc.G_L
where dd.FinancialYear = '2018-19' and ZoneName = 'BU-North'
group by ah.ChargeGroup

要修剪分区表,您需要在 where 子句中使用时间戳:

标准数据库

选择 t1.name, T2.类别 从 表1 T1 内部连接 表2 T2 ON t1.id_field = t2 字段2 哪里 t1.ts = CURRENT_TIMESTAMP((

话虽如此,因为 BigQuery 在非规范化数据方面表现更好。

最新更新