Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:✅ хранилище в Microsoft Fabric
Язык Transact-SQL предлагает варианты, позволяющие масштабно загружать данные из существующих таблиц в вашем lakehouse и хранилище данных в новые таблицы вашего хранилища. Эти параметры удобны, если необходимо создать новые версии таблицы с агрегированными данными, версиями таблиц с подмножеством строк или создать таблицу в результате сложного запроса. Рассмотрим некоторые примеры.
Создание таблицы с результатом запроса
Хранилище в Microsoft Fabric позволяет легко создавать новую таблицу на основе результата запроса T-SQL, используя следующие инструкции T-SQL:
-
CREATE TABLE AS SELECT
Инструкция CTAS, позволяющая создать новую таблицу в хранилище из выходных данных инструкцииSELECT
. -
SELECT INTO
Предложение запроса, позволяющее выбрать результаты из любого источника таблицы и перенаправить результаты в новую таблицу. Это стандартная функция на языке T-SQL.
Эти две инструкции похожи, поэтому следующие примеры сосредоточены на инструкции CTAS.
Оператор CTAS выполняет операцию загрузки в новую таблицу параллельно, что делает его очень эффективным для преобразования данных и создания новых таблиц в вашем рабочем пространстве.
Для части инструкции CTAS можно использовать следующие параметры SELECT
:
- Чтение таблицы хранилища, например промежуточной таблицы.
- Чтение папки Delta Lake в Lakehouse с использованием автоматически сгенерированной таблицы в SQL-аналитическом терминале для Lakehouse.
- Чтение CSV-файлов или Parquet непосредственно из Azure Data Lake или хранилища блобов Azure с использованием функции
OPENROWSET
.
Примечание.
В примерах в этой статье используется пример набора данных Bing COVID-19. Чтобы загрузить образец набора данных, выполните действия, описанные в разделе "Загрузка данных в хранилище с использованием инструкции COPY", чтобы загрузить образец данных в хранилище.
Создание таблицы из таблицы Warehouse
В первом примере показано, как создать новую таблицу, которая является копией существующей dbo.bing_covid19_data_2023
таблицы, но отфильтровывалась по данным только в 2023 году:
CREATE TABLE dbo.bing_covid19_data_2023
AS
SELECT *
FROM dbo.bing_covid19_data
WHERE DATEPART(YEAR, updated) = '2023';
Вы также можете создать новую таблицу с новыми year
столбцами, month
dayofmonth
столбцами, значениями, полученными из updated
столбца в исходной таблице. Это может быть полезно, если вы пытаетесь визуализировать данные инфекции по годам или увидеть месяцы, когда наблюдается большинство случаев COVID-19:
CREATE TABLE dbo.bing_covid19_data_with_year_month_day
AS
SELECT DATEPART(YEAR, updated) AS [year],
DATEPART(MONTH, updated) AS [month],
DATEPART(DAY, updated) AS [dayofmonth],
*
FROM dbo.bing_covid19_data;
В другом примере можно создать новую таблицу, которая суммирует количество случаев, наблюдаемых в каждом месяце, независимо от года, чтобы оценить, как сезонность влияет на распространение в заданной стране или регионе. Она использует таблицу, созданную в предыдущем примере, с новым month
столбцом в качестве источника:
CREATE TABLE dbo.infections_by_month
AS
SELECT country_region, [month],
SUM(CAST(confirmed as bigint)) AS confirmed_sum
FROM dbo.bing_covid19_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;
Создание таблицы из папки Delta Lake
Папки Delta Lake, сохраненные в OneLake, автоматически представляются в виде таблиц, если они хранятся в папке /Tables в lakehouse. Следующий код создает новую таблицу bing_covid19_data_2023
из папки Delta Lake /Table/bing_covid19_delta_lake в озере MyLakehouse :
CREATE TABLE dbo.bing_covid19_data_2023
AS
SELECT *
FROM MyLakehouse.dbo.bing_covid19_delta_lake
WHERE DATEPART(YEAR, updated) = '2023';
Вы можете ссылаться на папку Delta Lake с помощью трехчастной нотации, ссылающейся на lakehouse, где хранятся файлы. Все примеры, показанные в предыдущем разделе, применимы к папкам Delta Lake.
Создание таблицы из CSV/Parquet-файла
Вместо чтения данных из таблицы Warehouse bing_covid19_data
можно также создать новую таблицу непосредственно из внешнего файла с помощью OPENROWSET
функции:
CREATE TABLE dbo.bing_covid19_data_2022
AS
SELECT *
FROM OPENROWSET(BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet') AS data;
WHERE DATEPART(YEAR, updated) = '2022'
Вы также можете создать новую таблицу, преобразовав данные из внешнего CSV-файла:
CREATE TABLE dbo.bing_covid19_data_with_year_month_day
AS
SELECT DATEPART(YEAR, updated) AS [year],
DATEPART(MONTH, updated) AS [month],
DATEPART(DAY, updated) AS [dayofmonth],
*
FROM OPENROWSET(BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv') AS data;
В другом примере можно создать новую таблицу, которая суммирует количество случаев, наблюдаемых в каждом месяце, независимо от года, чтобы оценить, как сезонность влияет на распространение в заданной стране или регионе. Она использует таблицу, созданную в предыдущем примере, с новым month
столбцом в качестве источника:
CREATE TABLE dbo.infections_by_month_2022
AS
SELECT country_region,
DATEPART(MONTH, updated) AS [month],
SUM(CAST(confirmed as bigint)) AS [confirmed_sum]
FROM OPENROWSET(BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet') AS data
WHERE DATEPART(YEAR, updated) = '2022'
GROUP BY country_region, DATEPART(MONTH, updated);
На основе этой новой таблицы мы видим, что в США было зафиксировано больше подтвержденных случаев за все годы в месяце January
, а затем в December
и October
.
April
— месяц с наименьшим числом случаев в целом:
SELECT * FROM dbo.infections_by_month_2022
WHERE country_region = 'United States'
ORDER BY confirmed_sum DESC;
Дополнительные примеры и справочные материалы по синтаксису см. в статье CREATE TABLE AS SELECT (Transact-SQL).
Прием данных в существующие таблицы с помощью запросов T-SQL
В предыдущих примерах создаются новые таблицы на основе результата запроса. Чтобы воспроизвести примеры на существующих таблицах, можно использовать шаблон INSERT ... SELECT
.
Загрузка данных из таблицы Хранилища
Следующий код возвращает новые данные из таблицы хранилища в существующую таблицу:
INSERT INTO dbo.bing_covid19_data_2023
SELECT *
FROM dbo.bing_covid19_data
WHERE DATEPART(YEAR, updated) = '2023';
Критерии запроса для SELECT
инструкции могут быть любым допустимым запросом, если результирующий тип столбцов запроса соответствует столбцам в целевой таблице. Если имена столбцов указаны и включают только подмножество столбцов из целевой таблицы, все остальные столбцы загружаются как NULL
. Дополнительные сведения см. в разделе Using INSERT INTO... SELECT для массового импорта данных с минимальным ведением журнала и параллелизмом.
Прием данных из папки Delta Lake
Папки Delta Lake, сохраненные в OneLake, автоматически представляются в виде таблиц, если они хранятся в папке /Tables в lakehouse. Следующий код возвращает новые данные из папки Delta Lake /Tables/bing_covid19_delta_lake раздела MyLakehouse lakehouse
INSERT INTO dbo.bing_covid19_data_2023
SELECT *
FROM MyLakehouse.dbo.bing_covid19_delta_lake
WHERE DATEPART(YEAR, updated) = '2023';
Загрузка данных из CSV/Parquet-файла
Можно использовать функцию OPENROWSET
в качестве источника для приема данных из Azure Data Lake или Azure Blob-хранилища:
INSERT INTO dbo.bing_covid19_data_2023
SELECT *
FROM OPENROWSET(BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet') AS data
WHERE DATEPART(YEAR, updated) = '2023';
Эти примеры аналогичны тем, которые используются в загрузке с помощью COPY INTO. Команда COPY INTO удобнее использовать, особенно для простых загрузок данных из источника в назначение. Однако если необходимо преобразовать исходные данные (например, преобразование значений или присоединение к другим таблицам), использование INSERT ... SELECT предоставляет гибкость для выполнения преобразований во время приема.
Прием данных из таблиц в разных хранилищах и озерах
CREATE TABLE AS SELECT
INSERT ... SELECT
SELECT
В обоих случаях инструкция также может ссылаться на таблицы на хранилищах, отличающихся от хранилища, где хранится целевая таблица, с помощью запросов между хранилищами. Это можно достичь, используя трёхчастное соглашение об именовании [warehouse_or_lakehouse_name.][schema_name.]table_name
. Например, предположим, что у вас есть следующие ресурсы рабочей области:
- Лейкхаус под названием
cases_lakehouse
с последними данными по делу. - Склад с именем
reference_warehouse
, содержащий таблицы, используемые для эталонных данных. - Хранилище с именем
research_warehouse
, в котором создается целевая таблица.
Можно создать новую таблицу, которая использует трехкомпонентное именование для объединения данных из таблиц в этих ресурсах рабочей области:
CREATE TABLE research_warehouse.dbo.cases_by_continent
AS
SELECT *
FROM cases_lakehouse.dbo.bing_covid19_data AS cases
INNER JOIN reference_warehouse.dbo.bing_covid19_data AS reference
ON cases.iso3 = reference.countrycode;
Дополнительные сведения о межсайтовых запросах см. в статье "Написание запроса SQL между базами данных".