แชร์ผ่าน


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

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

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

สร้างตารางใหม่ที่มีผลลัพธ์ของคิวรี

Warehouse ใน Microsoft Fabric ช่วยให้คุณสามารถสร้างตารางใหม่โดยยึดตามผลลัพธ์ของคิวรี T-SQL ได้อย่างง่ายดาย โดยใช้คําสั่ง T-SQL ต่อไปนี้:

  • CREATE TABLE AS SELECT คําสั่ง CTAS ที่ช่วยให้คุณสามารถสร้างตารางใหม่ในคลังสินค้าของคุณจากผลลัพธ์ของ SELECT ใบแจ้งยอด
  • SELECT INTO ส่วนคําสั่งคิวรีที่ช่วยให้คุณสามารถเลือกผลลัพธ์จากแหล่งข้อมูลตารางใด ๆ และเปลี่ยนเส้นทางผลลัพธ์ไปยังตารางใหม่ นี่คือคุณลักษณะมาตรฐานในภาษา T-SQL

ข้อความสองรายการนี้จะคล้ายกัน ดังนั้นตัวอย่างต่อไปนี้จะเน้นที่คําสั่ง CTAS

คําสั่ง CTAS เรียกใช้การดําเนินการนําเข้าลงในตารางใหม่พร้อมกัน ทําให้มีประสิทธิภาพสูงสําหรับการแปลงข้อมูลและการสร้างตารางใหม่ในพื้นที่ทํางานของคุณ

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

  • การอ่านตารางคลังสินค้า เช่น ตารางการจัดเตรียม
  • การอ่านโฟลเดอร์ของ Lakehouse Delta Lake โดยใช้ตารางที่สร้างขึ้นโดยอัตโนมัติในจุดสิ้นสุดการวิเคราะห์ SQL สําหรับ Lakehouse
  • การอ่านไฟล์ CSV, Parquet หรือ JSONL โดยตรงจาก Azure Data Lake หรือที่เก็บข้อมูล Azure Blob โดยใช้ OPENROWSET ฟังก์ชัน

Note

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

สร้างตารางจากตารางคลังสินค้า

ตัวอย่างแรกแสดงให้เห็นวิธีการสร้างตารางใหม่ที่เป็นสําเนาของตารางที่มีอยู่ 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 จะแสดงเป็นตารางโดยอัตโนมัติหากจัดเก็บไว้ใน /Table ในเลคเฮ้าส์ โค้ดต่อไปนี้สร้างตาราง bing_covid19_data_2023 ใหม่จากโฟลเดอร์ Delta Lake /Tables/bing_covid19_delta_lake ใน MyLakehouse lakehouse:

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/JSONL

แทนที่จะอ่านข้อมูลจากตาราง 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.jsonl') 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;

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

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

ส่งข้อมูลจากโฟลเดอร์ Delta Lake

โฟลเดอร์ Delta Lake ที่คงอยู่ใน OneLake จะแสดงเป็นตารางโดยอัตโนมัติหากเก็บไว้ใน /Tables โฟลเดอร์ในเลคเฮาส์

รหัสต่อไปนี้นําเข้าข้อมูลใหม่จากส่วนโฟลเดอร์ /Tables/bing_covid19_delta_lake Delta Lake ใน MyLakehouse* เลคเฮาส์

INSERT INTO dbo.bing_covid19_data_2023
SELECT *
FROM MyLakehouse.dbo.bing_covid19_delta_lake 
WHERE DATEPART(YEAR, updated) = '2023';

นําเข้าข้อมูลจากไฟล์ CSV/Parquet/JSONL

คุณสามารถใช้ฟังก์ชันนี้เป็น OPENROWSET แหล่งที่มาเพื่อนําเข้าไฟล์ Parquet, CSV หรือ JSON จากที่เก็บข้อมูล:

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';

คุณสามารถอ่านไฟล์หลายไฟล์ได้โดยใช้สัญลักษณ์แทน เช่น *.parquetหรือโดยการกําหนดเป้าหมายไดเร็กทอรีแบบแบ่งพาร์ติชัน เช่น /year=*/month=*. เมื่อต้องการเพิ่มประสิทธิภาพ ให้ใช้ตัวกรองในส่วนคําสั่ง WHERE เพื่อกําจัดแถวและพาร์ติชันที่ไม่จําเป็นระหว่างการดําเนินการคิวรี

ตัวอย่างเหล่านี้คล้ายกับที่ใช้ในการนําเข้าที่มี COPY INTO คําสั่ง คัดลอกลงใน ใช้งานง่ายกว่า โดยเฉพาะอย่างยิ่งสําหรับการโหลดข้อมูลต้นทางไปยังปลายทางโดยตรง อย่างไรก็ตาม หากคุณต้องการแปลงข้อมูลต้นฉบับ (เช่น การแปลงค่าหรือการรวมกับตารางอื่น) การใช้จะช่วยให้คุณ INSERT ... SELECT มีความยืดหยุ่นในการดําเนินการแปลงระหว่างการนําเข้า

นําเข้าข้อมูลจาก OneLake

คุณสามารถใช้ OPENROWSET ฟังก์ชันเป็นแหล่งข้อมูลเพื่อนําเข้าข้อมูลจากที่เก็บข้อมูล Fabric OneLake แทนที่ {workspaceId} และ ด้วย {lakehouseId} GUID พื้นที่ทํางานและเลคเฮาส์ที่สอดคล้องกันในตัวอย่างต่อไปนี้:

INSERT INTO dbo.bing_covid19_data_2023
SELECT *
FROM OPENROWSET(BULK 'https://onelake.dfs.fabric.microsoft.com/{workspaceId}/{lakehouseId}/Files/year=*/month=*/*.parquet') AS data
WHERE data.filepath(1) = '2023'

ตัวอย่างนี้สร้างขึ้นจากตัวอย่างก่อนหน้านี้ที่อ่านข้อมูลจาก Azure Data Lake Storage ใช้วิธีการนี้เมื่อคุณต้องการแปลงข้อมูลต้นฉบับ เช่น การแปลงค่า การรวมกับตารางอื่น หรือการอ่านพาร์ติชันเฉพาะ ในกรณีเช่นนี้ การใช้จะ INSERT ... SELECT ให้ความยืดหยุ่นในการใช้การแปลงระหว่างการนําเข้าข้อมูล

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

สําหรับทั้ง CREATE TABLE AS SELECT และ INSERT ... SELECTSELECT คําสั่งยังสามารถอ้างอิงตารางบนคลังสินค้าซึ่งแตกต่างจากคลังสินค้าที่จัดเก็บตารางปลายทางของคุณ ซึ่งสามารถทําได้โดยใช้แบบแผน [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 แบบข้ามฐานข้อมูล

ตรวจสอบและตรวจสอบการนําเข้า T-SQL

ทั้งCTASINSERT ... SELECTและการดําเนินการที่ดําเนินการผ่าน T-SQL จะปรากฏในประวัติ/กิจกรรมการสืบค้นคลังสินค้า และสามารถตรวจสอบควบคู่ไปกับการดําเนินงานคลังสินค้าอื่นๆ

ตัวเลือกการนําเข้าข้อมูล

วิธีอื่นๆ ในการนําเข้าข้อมูลไปยังคลังสินค้าของคุณ ได้แก่: