แชร์ผ่าน


การนําเข้าข้อมูลลงในคลังสินค้าของคุณโดยใช้ Transact-SQL

นําไปใช้กับ:✅ Warehouse ใน Microsoft Fabric

ภาษา Transact-SQL มีตัวเลือกที่คุณสามารถใช้เพื่อโหลดข้อมูลจากตารางที่มีอยู่ในเลคเฮ้าส์และคลังสินค้าของคุณลงในตารางใหม่ในคลังสินค้าของคุณ ตัวเลือกเหล่านี้จะสะดวกถ้าคุณต้องการสร้างตารางเวอร์ชันใหม่ที่มีข้อมูลรวม เวอร์ชันของตารางที่มีชุดย่อยของแถว หรือเพื่อสร้างตารางอันเป็นผลมาจากคิวรีที่ซับซ้อน เรามาสํารวจตัวอย่างกัน

สร้างตารางใหม่ที่มีผลลัพธ์ของคิวรีโดยใช้ CREATE TABLE AS SELECT (CTAS)

คําสั่ง CREATE TABLE AS SELECT (CTAS) ช่วยให้คุณสามารถสร้างตารางใหม่ในคลังสินค้าของคุณจากเอาพุตของใบแจ้งยอด SELECT ซึ่งจะเรียกใช้การดําเนินการนําเข้าลงในตารางใหม่พร้อมกัน ทําให้มีประสิทธิภาพสูงสําหรับการแปลงข้อมูลและการสร้างตารางใหม่ในพื้นที่ทํางานของคุณ

คุณสามารถใช้ตัวเลือกต่อไปนี้สําหรับ SELECT ส่วนหนึ่งของคําสั่ง CTAS:

  • การอ่านตารางคลังสินค้า เช่น ตารางการจัดเตรียม
  • อ่านตาราง Lakehouse ที่สร้างขึ้นโดยอัตโนมัติผ่านจุดสิ้นสุดการวิเคราะห์ SQL สําหรับ Lakehouse
  • อ่านข้อมูลโดยตรงจากไฟล์ภายนอกโดยใช้ฟังก์ชัน OPENROWSET (ตัวอย่าง)

หมายเหตุ

ตัวอย่างในบทความนี้ใช้ชุดข้อมูลตัวอย่าง Bing COVID-19 เมื่อต้องการโหลดชุดข้อมูลตัวอย่าง ให้ทําตามขั้นตอนใน การนําเข้าข้อมูลลงในคลังสินค้าของคุณโดยใช้คําสั่ง คัดลอก เพื่อสร้างข้อมูลตัวอย่างลงในคลังสินค้าของคุณ

ตัวอย่างแรกแสดงให้เห็นวิธีการสร้างตารางใหม่ที่เป็นสําเนาของตารางที่มีอยู่ 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';

แทนที่จะอ่านข้อมูลจากตาราง [bing_covid-19_data] การกําหนดขั้น คุณยังสามารถสร้างตารางใหม่โดยตรงจากไฟล์ภายนอกโดยใช้ฟังก์ชัน OPENROWSET (ตัวอย่างสาธารณะ):

CREATE TABLE [dbo].[bing_covid-19_data_2022]
AS
SELECT id, updated, confirmed, deaths, recovered, latitude, longitude, iso2, iso3, country_region
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'

คุณยังสามารถสร้างตารางใหม่ด้วย 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];

แทนที่จะอ่านข้อมูลจากตารางการจัดเตรียม [bing_covid-19_data] คุณยังสามารถสร้างตารางใหม่ได้โดยตรงจากไฟล์ภายนอกและแปลงผลลัพธ์:

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],
        id, confirmed, deaths, recovered, latitude, longitude, iso2, iso3, country_region
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

อีกตัวอย่างหนึ่ง คุณสามารถสร้างตารางใหม่ที่สรุปจํานวนกรณีที่สังเกตได้ในแต่ละเดือน โดยไม่คํานึงถึงปี เพื่อประเมินว่ากาลมีผลต่อการแพร่กระจายในประเทศ/ภูมิภาคที่ระบุอย่างไร ซึ่งใช้ตารางที่สร้างขึ้นในตัวอย่างก่อนหน้ากับคอลัมน์ใหม่ 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];

CREATE TABLE [dbo].[infections_by_month_2022]
AS
SELECT [country_region], DATEPART(MONTH,[updated]) AS [month], SUM(CAST(confirmed as bigint)) [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]
WHERE [country_region] = 'United States'
ORDER BY [confirmed_sum] DESC;

ภาพหน้าจอของผลลัพธ์คิวรีที่แสดงจํานวนการติดเชื้อตามเดือนในสหรัฐอเมริกา โดยเรียงลําดับตามเดือนตามลําดับจากมากไปหาน้อย เลขเดือน 1 จะแสดงอยู่ด้านบนสุด

สําหรับตัวอย่างและการอ้างอิงไวยากรณ์เพิ่มเติม ดู สร้างตาราง 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 สําหรับข้อมูลเพิ่มเติม ดู การใช้แทรกลงใน... เลือกเพื่อนําเข้าข้อมูลกลุ่มด้วยการบันทึกน้อยที่สุดและแบบขนาน

นําเข้าข้อมูลจากตารางบนคลังสินค้าและเลคเฮ้าส์ที่แตกต่างกัน

สําหรับทั้ง สร้างตารางเป็นการเลือก และ 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_covid-19_data] cases
INNER JOIN [reference_warehouse].[dbo].[bing_covid-19_data] reference
ON cases.[iso3] = reference.[countrycode];

เมื่อต้องการเรียนรู้เพิ่มเติมเกี่ยวกับคิวรีข้ามคลังสินค้า ดู ที่ เขียนคิวรี SQL แบบข้ามฐานข้อมูล