Прием данных в хранилище с помощью Transact-SQL
Область применения:✅ хранилище в Microsoft Fabric
Язык Transact-SQL предлагает варианты, которые можно использовать для загрузки данных в масштабе из существующих таблиц в lakehouse и хранилище в новые таблицы в хранилище. Эти параметры удобны, если необходимо создать новые версии таблицы с агрегированными данными, версиями таблиц с подмножеством строк или создать таблицу в результате сложного запроса. Рассмотрим некоторые примеры.
Создание таблицы с результатом запроса с помощью CREATE TABLE AS SELECT (CTAS)
Инструкция CREATE TABLE AS SELECT (CTAS) позволяет создать новую таблицу в хранилище из выходных данных инструкции SELECT
. Она выполняет операцию приема в новую таблицу параллельно, что делает ее очень эффективной для преобразования данных и создания новых таблиц в рабочей области.
Примечание.
В примерах в этой статье используется пример набора данных Bing COVID-19. Чтобы загрузить образец набора данных, выполните действия, описанные в разделе "Прием данных" в хранилище с помощью инструкции COPY, чтобы создать образец данных в хранилище.
В первом примере показано, как создать новую таблицу, которая является копией существующей dbo.[bing_covid-19_data_2023]
таблицы, но отфильтровывалась по данным только в 2023 году:
CREATE TABLE [dbo].[bing_covid-19_data_2023]
AS
SELECT *
FROM [dbo].[bing_covid-19_data]
WHERE DATEPART(YEAR,[updated]) = '2023';
Вы также можете создать новую таблицу с новыми year
столбцами, month
dayofmonth
столбцами, значениями, полученными из updated
столбца в исходной таблице. Это может быть полезно, если вы пытаетесь визуализировать данные инфекции по годам или увидеть месяцы, когда наблюдается большинство случаев COVID-19:
CREATE TABLE [dbo].[bing_covid-19_data_with_year_month_day]
AS
SELECT DATEPART(YEAR,[updated]) [year], DATEPART(MONTH,[updated]) [month], DATEPART(DAY,[updated]) [dayofmonth], *
FROM [dbo].[bing_covid-19_data];
В другом примере можно создать новую таблицу, которая суммирует количество случаев, наблюдаемых в каждом месяце, независимо от года, чтобы оценить, как сезонность влияет на распространение в заданной стране или регионе. Она использует таблицу, созданную в предыдущем примере, с новым month
столбцом в качестве источника:
CREATE TABLE [dbo].[infections_by_month]
AS
SELECT [country_region],[month], SUM(CAST(confirmed as bigint)) [confirmed_sum]
FROM [dbo].[bing_covid-19_data_with_year_month_day]
GROUP BY [country_region],[month];
На основе этой новой таблицы мы видим, что США наблюдались более подтвержденные случаи в течение всех лет в месяцеJanuary
, а затем December
и October
. April
— месяц с наименьшим числом случаев в целом:
SELECT * FROM [dbo].[infections_by_month]
WHERE [country_region] = 'United States'
ORDER BY [confirmed_sum] DESC;
Дополнительные примеры и справочные материалы по синтаксису см. в статье CREATE TABLE AS SELECT (Transact-SQL).
Прием данных в существующие таблицы с помощью запросов T-SQL
В предыдущих примерах создаются новые таблицы на основе результата запроса. Чтобы реплицировать примеры, но в существующих таблицах, insert... Шаблон SELECT можно использовать. Например, следующий код возвращает новые данные в существующую таблицу:
INSERT INTO [dbo].[bing_covid-19_data_2023]
SELECT * FROM [dbo].[bing_covid-19_data]
WHERE [updated] > '2023-02-28';
Критерии запроса для SELECT
инструкции могут быть любым допустимым запросом, если результирующий тип столбцов запроса соответствует столбцам в целевой таблице. Если имена столбцов указаны и включают только подмножество столбцов из целевой таблицы, все остальные столбцы загружаются как NULL
. Дополнительные сведения см. в разделе Using INSERT INTO... SELECT для массового импорта данных с минимальным ведением журнала и параллелизмом.
Прием данных из таблиц в разных хранилищах и озерах
Для инструкций CREATE TABLE AS SELECT и INSERT... Инструкция SELECT также может ссылаться на таблицы на хранилищах, которые отличаются от хранилища, в котором хранится целевая таблица, с помощью запросов между хранилищами.SELECT
Это можно сделать с помощью соглашения [warehouse_or_lakehouse_name.][schema_name.]table_name
об именовании трех частей. Например, предположим, что у вас есть следующие ресурсы рабочей области:
- Lakehouse с
cases_lakehouse
последними данными о регистре. - Хранилище
reference_warehouse
с именами таблиц, используемых для эталонных данных. - Хранилище с именем
research_warehouse
, в котором создается целевая таблица.
Можно создать новую таблицу, которая использует трехкомпонентное именование для объединения данных из таблиц в этих ресурсах рабочей области:
CREATE TABLE [research_warehouse].[dbo].[cases_by_continent]
AS
SELECT
FROM [cases_lakehouse].[dbo].[bing_covid-19_data] cases
INNER JOIN [reference_warehouse].[dbo].[bing_covid-19_data] reference
ON cases.[iso3] = reference.[countrycode];
Дополнительные сведения о межсайтовых запросах см. в статье "Написание запроса SQL между базами данных".