หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
นําไปใช้กับ:✅ จุดสิ้นสุดการวิเคราะห์ SQL และ Warehouse ใน Microsoft Fabric
ในบทความนี้ คุณจะได้เรียนรู้วิธีการสืบค้นไฟล์ JSON โดยใช้ Fabric SQL รวมถึง Fabric Data Warehouse และตําแหน่งข้อมูลการวิเคราะห์ SQL
JSON (JavaScript Object Notation) เป็นรูปแบบที่มีน้ําหนักเบาสําหรับข้อมูลกึ่งโครงสร้าง ซึ่งใช้กันอย่างแพร่หลายในข้อมูลขนาดใหญ่สําหรับสตรีมเซ็นเซอร์ การกําหนดค่า IoT บันทึก และข้อมูลเชิงพื้นที่ (เช่น GeoJSON)
ใช้ OPENROWSET เพื่อสืบค้นไฟล์ JSON โดยตรง
ใน Fabric Data Warehouse และตําแหน่งข้อมูลการวิเคราะห์ SQL สําหรับ Lakehouse คุณสามารถสืบค้นไฟล์ JSON ได้โดยตรงในทะเลสาบโดยใช้ OPENROWSET ฟังก์ชัน
OPENROWSET( BULK '{{filepath}}', [ , <options> ... ])
[ WITH ( <column schema and mappings> ) ];
เมื่อคุณสืบค้นไฟล์ JSON ด้วย OPENROWSET คุณเริ่มต้นด้วยการระบุเส้นทางของไฟล์ ซึ่งอาจเป็น URL โดยตรงหรือรูปแบบสัญลักษณ์ตัวแทนที่กําหนดเป้าหมายไฟล์อย่างน้อยหนึ่งไฟล์ ตามค่าเริ่มต้น Fabric จะฉายคุณสมบัติระดับบนสุดแต่ละรายการในเอกสาร JSON เป็นคอลัมน์แยกต่างหากในชุดผลลัพธ์ สําหรับไฟล์ JSON Lines แต่ละบรรทัดจะถือว่าเป็นแถวเดี่ยว จึงเหมาะสําหรับสถานการณ์การสตรีม
หากคุณต้องการการควบคุมเพิ่มเติม:
- ใช้ส่วนคําสั่งทางเลือก
WITHเพื่อกําหนด Schema อย่างชัดเจนและแมปคอลัมน์กับคุณสมบัติ JSON เฉพาะ รวมถึงเส้นทางที่ซ้อนกัน - ใช้เพื่อ
DATA_SOURCEอ้างอิงตําแหน่งรากสําหรับเส้นทางสัมพัทธ์ - กําหนดค่าพารามิเตอร์การจัดการข้อผิดพลาด เช่น
MAXERRORSการจัดการปัญหาการแยกวิเคราะห์อย่างราบรื่น
กรณีการใช้งานไฟล์ JSON ทั่วไป
ประเภทไฟล์ JSON ทั่วไปและกรณีการใช้งานที่คุณสามารถจัดการได้ใน Microsoft Fabric:
- ไฟล์ JSON ("JSON Lines") ที่คั่นด้วยบรรทัด โดยที่แต่ละบรรทัดเป็นเอกสาร JSON ที่ถูกต้องแบบสแตนด์อโลน (ตัวอย่างเช่น เหตุการณ์ การอ่าน หรือรายการบันทึก)
- ไฟล์ทั้งหมดไม่จําเป็นต้องเป็นเอกสาร JSON ที่ถูกต้องเพียงฉบับเดียว แต่เป็นลําดับของออบเจ็กต์ JSON ที่คั่นด้วยอักขระบรรทัดใหม่
- ไฟล์ที่มีรูปแบบนี้มักจะมีนา
.jsonlมสกุล ,.ldjsonหรือ.ndjson. เหมาะอย่างยิ่งสําหรับการสตรีมและเฉพาะสถานการณ์สมมติ - ผู้เขียนสามารถผนวกเหตุการณ์ใหม่เป็นบรรทัดใหม่ได้โดยไม่ต้องเขียนไฟล์ใหม่หรือทําลายโครงสร้าง
- ไฟล์ JSON เอกสารเดียว ("JSON แบบคลาสสิก") ที่มี
.jsonนามสกุลที่ไฟล์ทั้งหมดเป็นเอกสาร JSON ที่ถูกต้องหนึ่งฉบับ ไม่ว่าจะเป็นวัตถุเดียวหรืออาร์เรย์ของวัตถุ (อาจซ้อนกัน)- โดยทั่วไปจะใช้สําหรับการกําหนดค่า สแนปช็อต และชุดข้อมูลที่ส่งออกในชิ้นเดียว
- ตัวอย่างเช่น ไฟล์ GeoJSON มักจะจัดเก็บออบเจ็กต์ JSON เดียวที่อธิบายคุณลักษณะและรูปทรงเรขาคณิต
สืบค้นไฟล์ JSONL ด้วย OPENROWSET
Fabric Data Warehouse และตําแหน่งข้อมูลการวิเคราะห์ SQL สําหรับ Lakehouse ช่วยให้นักพัฒนา SQL สามารถคิวรีไฟล์ JSON Lines (.jsonl, .ldjson, .ndjson) ได้โดยตรงจาก Data Lake โดยใช้ OPENROWSET ฟังก์ชัน
ไฟล์เหล่านี้มีออบเจ็กต์ JSON ที่ถูกต้องหนึ่งรายการต่อบรรทัด ทําให้เหมาะสําหรับการสตรีมและสถานการณ์ผนวกเท่านั้น
หากต้องการอ่านไฟล์ JSON Lines ให้ระบุ URL ในอาร์กิวเมนต์ BULK :
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.jsonl'
);
โดยค่าเริ่มต้น OPENROWSET จะใช้การอนุมานสคีมา โดยจะค้นหาคุณสมบัติระดับบนสุดทั้งหมดในออบเจ็กต์ JSON แต่ละรายการโดยอัตโนมัติ และส่งคืนเป็นคอลัมน์
อย่างไรก็ตาม คุณสามารถกําหนด Schema ได้อย่างชัดเจนเพื่อควบคุมคุณสมบัติที่ส่งคืนและแทนที่ชนิดข้อมูลที่อนุมาน:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.jsonl'
) WITH (
country_region VARCHAR(100),
confirmed INT,
date_reported DATE '$.updated'
);
คําจํากัดความ Schema ที่ชัดเจนมีประโยชน์เมื่อ:
- คุณต้องการแทนที่ชนิดที่อนุมานเริ่มต้น (ตัวอย่างเช่น เพื่อบังคับชนิดข้อมูล วันที่ แทน varchar)
- คุณต้องมีชื่อคอลัมน์ที่เสถียรและการฉายภาพแบบเลือก
- คุณต้องการแมปคอลัมน์กับคุณสมบัติ JSON ที่เฉพาะเจาะจง รวมถึงเส้นทางที่ซ้อนกัน
อ่านโครงสร้าง JSON ที่ซับซ้อน (ซ้อนกัน) ด้วย OPENROWSET
Fabric Data Warehouse และตําแหน่งข้อมูลการวิเคราะห์ SQL สําหรับ Lakehouse ช่วยให้นักพัฒนา SQL สามารถอ่าน JSON ด้วยออบเจ็กต์ที่ซ้อนกันหรืออาร์เรย์ย่อยได้โดยตรงจากทะเลสาบโดยใช้OPENROWSET
{
"type": "Feature",
"properties": {
"shapeName": "Serbia",
"shapeISO": "SRB",
"shapeID": "94879208B25563984444888",
"shapeGroup": "SRB",
"shapeType": "ADM0"
}
}
ในตัวอย่างต่อไปนี้ ให้สอบถามแฟ้มที่มีข้อมูลตัวอย่าง และใช้ WITH ส่วนคําสั่งเพื่อฉายคุณสมบัติระดับลีฟอย่างชัดเจน:
SELECT
*
FROM
OPENROWSET(
BULK '/Files/parquet/nested/geojson.jsonl'
)
WITH (
-- Top-level field
[type] VARCHAR(50),
-- Leaf properties from the nested "properties" object
shapeName VARCHAR(200) '$.properties.shapeName',
shapeISO VARCHAR(50) '$.properties.shapeISO',
shapeID VARCHAR(200) '$.properties.shapeID',
shapeGroup VARCHAR(50) '$.properties.shapeGroup',
shapeType VARCHAR(50) '$.properties.shapeType'
);
Note
ตัวอย่างนี้ใช้ เส้นทางสัมพัทธ์ที่ไม่มีแหล่งข้อมูล ซึ่งทํางานเมื่อสืบค้นไฟล์ใน Lakehouse ของคุณผ่านตําแหน่งข้อมูลการวิเคราะห์ SQL ใน Fabric Data Warehouse คุณต้อง:
- ใช้เส้นทางแบบ สัมบูรณ์ ไปยังไฟล์ หรือ
- ระบุ URL ราก ในแหล่งข้อมูลภายนอก และอ้างอิงใน
OPENROWSETคําสั่งโดยใช้DATA_SOURCEอ็อพชัน
ขยายอาร์เรย์ที่ซ้อนกัน (JSON เป็นแถว) ด้วย OPENROWSET
Fabric Data Warehouse และตําแหน่งข้อมูลการวิเคราะห์ SQL สําหรับ Lakehouse ช่วยให้คุณอ่านไฟล์ JSON ที่มีอาร์เรย์ที่ซ้อนกันโดยใช้OPENROWSET จากนั้น คุณสามารถขยาย (ยกเลิกการซ้อน) อาร์เรย์เหล่านั้นได้โดยใช้CROSS APPLY OPENJSON วิธีนี้มีประโยชน์เมื่อเอกสารระดับบนสุดมีอาร์เรย์ย่อยที่คุณต้องการเป็นหนึ่งแถวต่อองค์ประกอบ
ในการป้อนข้อมูลตัวอย่างแบบง่ายต่อไปนี้ เอกสารที่คล้ายกับ GeoJSON จะมีอาร์เรย์คุณลักษณะ:
{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{
"type": "Feature",
"properties": {
"shapeName": "Serbia",
"shapeISO": "SRB",
"shapeID": "94879208B25563984444888",
"shapeGroup": "SRB",
"shapeType": "ADM0"
},
"geometry": {
"type": "Line",
"coordinates": [[[19.6679328, 46.1848744], [19.6649294, 46.1870428], [19.6638492, 46.1890231]]]
}
}
]
}
คิวรีต่อไปนี้:
- อ่านเอกสาร JSON จากทะเลสาบโดยใช้
OPENROWSETการฉายคุณสมบัติชนิดระดับบนสุดพร้อมกับอาร์เรย์คุณลักษณะดิบ - นําไปใช้
CROSS APPLY OPENJSONเพื่อขยายอาร์เรย์คุณสมบัติเพื่อให้แต่ละองค์ประกอบกลายเป็นแถวของตัวเองในชุดผลลัพธ์ ภายในส่วนขยายนี้ คิวรีจะแยกค่าที่ซ้อนกันโดยใช้นิพจน์เส้นทาง JSON ค่า เช่นshapeName,shapeISOและgeometryรายละเอียด เช่นgeometry.typeและcoordinates, เป็นคอลัมน์แบบแบนเพื่อให้วิเคราะห์ได้ง่ายขึ้น
SELECT
r.crs_name,
f.[type] AS feature_type,
f.shapeName,
f.shapeISO,
f.shapeID,
f.shapeGroup,
f.shapeType,
f.geometry_type,
f.coordinates
FROM
OPENROWSET(
BULK '/Files/parquet/nested/geojson.jsonl'
)
WITH (
crs_name VARCHAR(100) '$.crs.properties.name', -- top-level nested property
features VARCHAR(MAX) '$.features' -- raw JSON array
) AS r
CROSS APPLY OPENJSON(r.features)
WITH (
[type] VARCHAR(50),
shapeName VARCHAR(200) '$.properties.shapeName',
shapeISO VARCHAR(50) '$.properties.shapeISO',
shapeID VARCHAR(200) '$.properties.shapeID',
shapeGroup VARCHAR(50) '$.properties.shapeGroup',
shapeType VARCHAR(50) '$.properties.shapeType',
geometry_type VARCHAR(50) '$.geometry.type',
coordinates VARCHAR(MAX) '$.geometry.coordinates'
) AS f;