مشاركة عبر


استخدام بيانات تعريف الملف في استعلامات تجمع 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;

الخطوة التالية