استخدام بيانات تعريف الملف في استعلامات تجمع SQL بدون خادم
يمكن لتجمع SQL بدون خادم معالجة ملفات ومجلدات متعددة كما هو موضح في مقالة مجلدات الاستعلام والملفات المتعددة. في هذه المقالة، تعرف على كيفية استخدام معلومات بيانات التعريف حول أسماء الملفات والمجلدات في الاستعلامات.
في بعض الأحيان، قد تحتاج إلى معرفة مصدر الملف أو المجلد الذي يرتبط بصف معين في مجموعة النتائج.
يمكنك استخدام الدالة filepath وإرجاع filename أسماء الملفات و/أو المسار في مجموعة النتائج. أو يمكنك استخدامها لتصفية البيانات استنادا إلى اسم الملف و/أو مسار المجلد. يتم وصف هذه الوظائف في قسم بناء الجملة وظيفة اسم الملف ووظيفةfilepath. في الأقسام التالية، ستجد أوصافا قصيرة على طول العينات.
المتطلبات الأساسية
خطوتك الأولى هي إنشاء قاعدة بيانات باستخدام مصدر بيانات يشير إلى حساب تخزين. ثم تهيئة العناصر من خلال تنفيذ برنامج الإعداد النصي على قاعدة البيانات. سيقوم برنامج الإعداد النصي هذا بإنشاء مصادر البيانات وبيانات اعتماد في نطاق قاعدة البيانات وتنسيقات الملفات الخارجية المستخدمة في هذه العينات.
الوظائف
اسم الملف
ترجع هذه الدالة اسم الملف الذي ينشأ منه الصف.
يقرأ النموذج التالي ملفات بيانات التاكسي الأصفر في مدينة نيويورك للأشهر الثلاثة الأخيرة من عام 2017 وإرجاع عدد الرحلات لكل ملف. يحدد جزء OPENROWSET من الاستعلام الملفات التي سيتم قراءتها.
SELECT
nyc.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM
OPENROWSET(
BULK 'parquet/taxi/year=2017/month=9/*.parquet',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT='PARQUET'
) nyc
GROUP BY nyc.filename();
يوضح المثال التالي كيفية استخدام filename() في العبارة WHERE لتصفية الملفات المراد قراءتها. يقوم بالوصول إلى المجلد بأكمله في جزء OPENROWSET من الاستعلام وتصفية الملفات في العبارة WHERE.
ستكون نتائجك هي نفسها مثل المثال السابق.
SELECT
r.filename() AS [filename]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
PARSER_VERSION = '2.0',
FIRSTROW = 2)
WITH (C1 varchar(200) ) AS [r]
WHERE
r.filename() IN ('yellow_tripdata_2017-10.csv', 'yellow_tripdata_2017-11.csv', 'yellow_tripdata_2017-12.csv')
GROUP BY
r.filename()
ORDER BY
[filename];
فايلباث
ترجع الدالة filepath مسارا كاملا أو جزئيا:
- عند استدعائه بدون معلمة، فإنه يقوم بإرجاع مسار الملف الكامل الذي ينشأ منه الصف. عند استخدام DATA_SOURCE في OPENROWSET، فإنه يرجع المسار بالنسبة إلى DATA_SOURCE.
- عند استدعائه باستخدام معلمة، فإنه يرجع جزءا من المسار الذي يطابق حرف البدل على الموضع المحدد في المعلمة. على سبيل المثال، ستقوم قيمة المعلمة 1 بإرجاع جزء من المسار الذي يطابق حرف البدل الأول.
يقرأ النموذج التالي ملفات بيانات التاكسي الأصفر في مدينة نيويورك للأشهر الثلاثة الأخيرة من عام 2017. ترجع هذه الدالة عدد الرحلات لكل مسار ملف. يحدد جزء OPENROWSET من الاستعلام الملفات التي سيتم قراءتها.
SELECT
r.filepath() AS filepath
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-1*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
GROUP BY
r.filepath()
ORDER BY
filepath;
يوضح المثال التالي كيفية استخدام filepath() في العبارة WHERE لتصفية الملفات المراد قراءتها.
يمكنك استخدام أحرف البدل في جزء OPENROWSET من الاستعلام وتصفية الملفات في العبارة WHERE. ستكون نتائجك هي نفسها مثل المثال السابق.
SELECT
r.filepath() AS filepath
,r.filepath(1) AS [year]
,r.filepath(2) AS [month]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_*-*.csv',
DATA_SOURCE = 'SqlOnDemandDemo',
FORMAT = 'CSV',
PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id INT
) AS [r]
WHERE
r.filepath(1) IN ('2017')
AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
r.filepath()
,r.filepath(1)
,r.filepath(2)
ORDER BY
filepath;
الخطوات التالية
في المقالة التالية، ستتعرف على كيفية الاستعلام عن ملفات Parquet.