استخدام بيانات تعريف الملف في استعلامات تجمع SQL بلا خادم

يمكن لتجمع SQL بلا خادم معالجة ملفات ومجلدات متعددة كما هو موضح في مقالة مجلدات الاستعلام والملفات المتعددة. في هذه المقالة، ستتعرف على كيفية استخدام معلومات بيانات التعريف حول أسماء الملفات والمجلدات في الاستعلامات.

في بعض الأحيان، قد تحتاج إلى معرفة مصدر الملف أو المجلد الذي يرتبط بصف معين في مجموعة النتائج.

يمكنك استخدام الدالة 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;

يوضح المثال التالي كيفية استخدام filename() في عبارة 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.