استخدام بيانات تعريف الملف في استعلامات تجمع SQL بلا خادم
في هذه المقالة، ستتعلم كيفية الاستعلام عن ملفات أو مجلدات معينة باستخدام بيانات التعريف. يمكن لتجمع SQL بلا خادم معالجة ملفات ومجلدات متعددة. لمزيد من المعلومات، راجع مجلدات الاستعلام وملفات متعددة.
في بعض الأحيان، قد تحتاج إلى معرفة مصدر الملف أو المجلد الذي يرتبط بصف معين في مجموعة النتائج. يمكنك استخدام الدالات filepath
وإرجاع filename
أسماء الملفات و/أو المسار في مجموعة النتائج، أو يمكنك استخدامها لتصفية البيانات استنادا إلى اسم الملف أو مسار المجلد. يتم وصف هذه الدالات في الدالة filename ودالة filepath.
توفر الأقسام التالية أوصافا قصيرة وعينات تعليمات برمجية.
المتطلبات الأساسية
خطوتك الأولى هي إنشاء قاعدة بيانات مع مصدر بيانات يشير إلى حساب تخزين. ثم قم بتهيئة الكائنات عن طريق تنفيذ برنامج نصي للإعداد على قاعدة البيانات هذه. ينشئ هذا البرنامج النصي للإعداد مصادر البيانات وبيانات اعتماد نطاق قاعدة البيانات وتنسيقات الملفات الخارجية المستخدمة في هذه العينات.
الوظائف
Filename
ترجع filename
الدالة اسم الملف الذي ينشأ منه الصف.
يقرأ النموذج التالي ملفات بيانات سيارة الأجرة الصفراء في مدينة نيويورك لشهر سبتمبر 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
ترجع 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;