Поделиться через


Прием данных в хранилище с помощью 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столбцами, monthdayofmonth столбцами, значениями, полученными из 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;

Снимок экрана: результаты запроса, показывающие количество инфекций по месяцам в США, упорядоченных по месяцам в порядке убывания. Номер месяца 1 отображается сверху.

Дополнительные примеры и справочные материалы по синтаксису см. в статье 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 между базами данных".