BigQuery 比 SQL Server 慢

Posted

技术标签:

【中文标题】BigQuery 比 SQL Server 慢【英文标题】:BigQuery slower than SQL Server 【发布时间】:2017-09-01 08:18:51 【问题描述】:

我正在比较 SQL Server 2016(星型模式并使用基于列的聚集索引)和 BigQuery(一个表)之间的数据集市中的查询执行时间。我有大约 2000 万个条目。这是我的查询 - 我需要按月计算石油、天然气、水量的总和。 10 年来,我每天都有单次条目。我有 6500 个实体,每个实体都有 10 年的石油、天然气、水量的单一条目……所以总行数……6500(实体总数)* 10(总年数)* 365(总天数)=23725000。 .暂时忽略闰年

BigQuery - 旧版 SQL(耗时 5 秒)

SELECT [ASSET] AS [ASSET],
                  SUM([Measurements.GAS]) AS[sum_Measurements_GAS_ok],
                  SUM([Measurements.OIL]) AS[sum_Measurements_OIL_ok],
                  SUM([Measurements.WATER]) AS[sum_Measurements_WATER_ok],
                  STRFTIME_UTC_USEC(TIMESTAMP(TIMESTAMP_TO_MSEC(Measurements.DATE)), '%Y-%m') as [month]
                FROM [datamanager-dashboard:bigquerysample.initial_va_schema_v3][initial_va_schema_v3]
                GROUP BY 1, 5

SQL Server 2016 - Star Schema(耗时 2 秒)- 在 Google Compute Engine 中的 VM 内运行 - n1-standard-4

SELECT [dim_asset_types].[asset_name] AS Asset,
            SUM([fact_well_volume_events].[gas]) AS [sum:gas:ok],
            SUM([fact_well_volume_events].[oil]) AS [sum:oil:ok],
            SUM([fact_well_volume_events].[water]) AS [sum:water:ok],
            DATEADD(month, DATEDIFF(month, 0, [fact_well_volume_events].[measurement_date]), 0) AS [tmn:measurement_date:ok]
            FROM [dbo].[dim_asset_types] [dim_asset_types]
            INNER JOIN [dbo].[xref_well_to_asset_type] [xref_well_to_asset_type] ON ([dim_asset_types].[dim_asset_type_key] = [xref_well_to_asset_type].[dim_asset_type_key])
            INNER JOIN [dbo].[dim_wells] [dim_wells] ON ([xref_well_to_asset_type].[dim_well_key] = [dim_wells].[dim_well_key])
            INNER JOIN [dbo].[fact_well_volume_events_with_calculations] [fact_well_volume_events] ON ([dim_wells].[dim_well_key] = [fact_well_volume_events].[dim_well_key])
            GROUP BY [dim_asset_types].[asset_name],DATEADD(month, DATEDIFF(month, 0, [fact_well_volume_events].[measurement_date]), 0)

我只给出了一个例子,但它发生在各种不同的查询中。我错过了什么吗?为什么 BigQuery 这么慢?

编辑:我正在附加示例架构...它不完整..

[
  
    "name": "ASSET",
    "type": "STRING"
  ,
  
    "name": "Measurements",
    "type": "record",
    "mode": "repeated",
    "fields": [
      
        "name": "DATE",
        "type": "TIMESTAMP"
      ,
      
        "name": "OIL",
        "type": "FLOAT"
      ,
      
        "name": "WATER",
        "type": "FLOAT"
      ,
      
        "name": "GAS",
        "type": "FLOAT"
      
    ]
  
]

【问题讨论】:

对于基准测试,请务必在 BigQuery 中也使用 standard SQL。话虽如此,BigQuery 的优势在于它处理并发和大型查询的能力如何,而不是它在小型查询上的表现如何。 您是说使用标准 SQL 会很快吗?使用标准 SQL 也很慢。 我的意思是,如果您想对 BigQuery 进行基准测试,您应该使用团队正在积极改进性能的方言。在架构设计方面,您最好使用嵌套架构而不是拥有多个事实表。 @Elliott...我有嵌套列而不是多个事实表的单个架构...SQL Server 星型架构中有多个事实表...让我也与标准 SQL 分享性能数据...我用 BigQuery 中使用的最小嵌套架构更新了我的问题 我真的会推荐contacting sales,谁更擅长在这种事情上提供建议。 【参考方案1】:

BigQuery 不会比 SQL Server 在数据集市上执行小查询提供更好的结果。 BigQuery 可以很好地处理大量查询,但总是有几秒钟的固定时间。它需要创建一个执行计划并将其分发到不同的机器上,这需要时间。

SQL Server 和 BigQuery 之间的区别在于,您可以对原始数据(没有数据集市)运行大量查询,并且可能在 SQL Server 可能需要几分钟或几小时的查询中,BigQuery 只需要不到一分钟的时间。

【讨论】:

以上是关于BigQuery 比 SQL Server 慢的主要内容,如果未能解决你的问题,请参考以下文章

如何避免 BigQuery 中的 Power BI 增量刷新重复查询?

SQL SERVER 访问Sybase速度过慢,怎么解决?

如何解决BI系统性能差响应慢的问题

将数据从 BigQuery 导入 SQL Server [关闭]

2017.7.8 MS SQL Server and BI workshop

将 100 万条记录从 SQL Server 插入 BigQuery 表,通过 CDATA odbc 驱动程序链接