BigQuery比SQL Server慢

问题描述 投票:0回答:1

我在SQL Server 2016(星型模式和使用基于列的聚簇索引)和BigQuery(一个单独的表)之间比较我的数据集市中的查询执行时间。我有大约2000万个条目。这是我的疑问 - 我需要月份明智的石油,天然气,水量。我每天都会单独订阅10年。我有6500个实体,每个实体有10年的石油,天然气,水的单一进入......总行数... 6500(总实体)* 10(总年)* 365(总天数)= 23725000。 .ignore闰年

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 - 星型架构(需要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"
      }
    ]
  }
]
google-bigquery google-cloud-platform datamart
1个回答
0
投票

与SQL Server对Datamarts进行小型查询相比,BigQuery不会给你带来更好的结果。 BigQuery可以很好地处理大量查询,但总是有几秒钟的固定时间。它需要创建一个执行计划并将其分发到不同的机器中并且需要时间。

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

© www.soinside.com 2019 - 2024. All rights reserved.