Я сравниваю время выполнения запросов в своих витринах данных между 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"
}
]
}
]