BigQuery медленнее, чем SQL Server

Я сравниваю время выполнения запросов в своих витринах данных между SQL Server 2016 (звездообразная схема и кластерный индекс на основе столбцов) и BigQuery (одна таблица). У меня около 20 миллионов записей. Вот мой запрос - мне нужна месячная сумма объемов нефти, газа, воды. У меня в день разовая запись томов за 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 - звездообразная схема (занимает 2 секунды) - выполняется внутри виртуальной машины в Google Compute Engine - 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"
      }
    ]
  }
]

person Abhay    schedule 01.09.2017    source источник
comment
Для сравнительного анализа обязательно используйте стандартный SQL в BigQuery как хорошо. При этом преимущество BigQuery заключается в том, насколько хорошо он обрабатывает параллелизм и большие запросы, а не в том, насколько хорошо он работает с небольшими запросами.   -  person Elliott Brossard    schedule 01.09.2017
comment
Вы хотите сказать, что со стандартным SQL все будет быстро? Он медленный и со стандартным SQL.   -  person Abhay    schedule 02.09.2017
comment
Я говорю, что если вы хотите протестировать BigQuery, вам следует использовать диалект, на котором команда активно работает над улучшением производительности. С точки зрения дизайна схемы вам может быть лучше использовать вложенную схему вместо нескольких таблиц фактов.   -  person Elliott Brossard    schedule 02.09.2017
comment
@Elliott ... У меня одна схема с вложенными столбцами, а не несколько таблиц фактов ... В схеме звезды SQL Server есть несколько таблиц фактов ... позвольте мне поделиться числами производительности и со стандартным SQL ... Я обновил свой вопрос с минимальной вложенной схемой, используемой в BigQuery   -  person Abhay    schedule 04.09.2017
comment
@ElliottBrossard ... есть идеи? Мне срочно нужна помощь, которая поможет мне сузить выбор витрины данных до BigQuery ...   -  person Abhay    schedule 06.09.2017
comment
Я бы действительно посоветовал связаться с отделом продаж, кто лучше может дать предложения по этому поводу.   -  person Elliott Brossard    schedule 06.09.2017


Ответы (1)


BigQuery не даст вам лучших результатов, чем SQL Server, выполняющий небольшие запросы к Datamarts. BigQuery очень хорошо работает с огромными запросами, но всегда имеет фиксированное время в несколько секунд. Ему необходимо создать план выполнения и распределить его по разным машинам, а для этого нужно время.

Разница между SQL Server и BigQuery заключается в том, что вы можете выполнять огромные запросы к своим необработанным данным (без Datamarts) и, вероятно, в запросах, которые SQL Server может занять минуты или часы, BigQuery займет меньше минуты.

person Javier Montón    schedule 21.02.2019