الانتقال إلى المحتوى الرئيسي

دالة الجدول hdfs

تنشئ جدولًا من ملفات موجودة في HDFS. تشبه دالة الجدول هذه دالتي الجدول url وfile.

البنية

hdfs(URI, format, structure)

الوسائط

الوسيطةالوصف
URIعنوان URI النسبي للملف في HDFS. يدعم مسار الملف أنماط globs التالية في وضع readonly: *، ?، {abc,def} و {N..M}، حيث إن N و M — أرقام، و'abc' و'def' — سلاسل نصية.
formatصيغة الملف.
structureبنية الجدول. الصيغة: 'column1_name column1_type, column2_name column2_type, ...'.

القيمة المُعادة

جدول ذو البنية المحددة لقراءة البيانات من الملف المحدد أو كتابتها فيه. مثال جدول من hdfs://hdfs1:9000/test واختيار أول صفين منه:
SELECT *
FROM hdfs('hdfs://hdfs1:9000/test', 'TSV', 'column1 UInt32, column2 UInt32, column3 UInt32')
LIMIT 2
┌─column1─┬─column2─┬─column3─┐
│       1 │       2 │       3 │
│       3 │       2 │       1 │
└─────────┴─────────┴─────────┘

أنماط globs في المسار

قد تستخدم المسارات globbing. ويجب أن تطابق الملفات نمط المسار بالكامل، وليس اللاحقة أو البادئة فقط.
  • * — يمثّل أي عدد من المحارف باستثناء /، بما في ذلك السلسلة الفارغة.
  • ** — يمثّل جميع الملفات داخل مجلد بشكل تكراري.
  • ? — يمثّل محرفًا واحدًا عشوائيًا.
  • {some_string,another_string,yet_another_one} — يستبدل أيًّا من السلاسل 'some_string', 'another_string', 'yet_another_one'. ويمكن أن تحتوي السلاسل على الرمز /.
  • {N..M} — يمثّل أي عدد >= N و <= M.
التركيبات التي تحتوي على {} مشابهة لدوال الجداول remote و file. مثال
  1. لنفترض أن لدينا عدة ملفات بعناوين URI التالية على HDFS:
  • ‘hdfs://hdfs1:9000/some_dir/some_file_1’
  • ‘hdfs://hdfs1:9000/some_dir/some_file_2’
  • ‘hdfs://hdfs1:9000/some_dir/some_file_3’
  • ‘hdfs://hdfs1:9000/another_dir/some_file_1’
  • ‘hdfs://hdfs1:9000/another_dir/some_file_2’
  • ‘hdfs://hdfs1:9000/another_dir/some_file_3’
  1. استعلم عن عدد الصفوف في هذه الملفات:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV', 'name String, value UInt32')
  1. استعلم عن عدد الصفوف في جميع ملفات هذين الدليلين:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/*', 'TSV', 'name String, value UInt32')
إذا كانت قائمة الملفات لديك تتضمن نطاقات رقمية تبدأ بأصفار، فاستخدم الصيغة التي تعتمد على الأقواس المعقوفة لكل رقم على حدة، أو استخدم ?.
مثال استعلم عن البيانات من الملفات المسماة file000 وfile001 و… وfile999:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV', 'name String, value UInt32')

الأعمدة الافتراضية

  • _path — مسار الملف. النوع: LowCardinality(String).
  • _file — اسم الملف. النوع: LowCardinality(String).
  • _size — حجم الملف بالبايت. النوع: Nullable(UInt64). إذا كان الحجم غير معروف، تكون القيمة NULL.
  • _time — وقت آخر تعديل للملف. النوع: Nullable(DateTime). إذا كان الوقت غير معروف، تكون القيمة NULL.

إعداد use_hive_partitioning

عند تعيين use_hive_partitioning إلى 1، سيكتشف ClickHouse التقسيم بأسلوب Hive في المسار (/name=value/)، وسيتيح استخدام أعمدة التقسيم كأعمدة افتراضية في الاستعلام. وستحمل هذه الأعمدة الافتراضية الأسماء نفسها الموجودة في مسار التقسيم. مثال استخدام عمود افتراضي أُنشئ باستخدام التقسيم بأسلوب Hive
SELECT * FROM HDFS('hdfs://hdfs1:9000/data/path/date=*/country=*/code=*/*.parquet') WHERE date > '2020-01-01' AND country = 'Netherlands' AND code = 42;

إعدادات التخزين

  • hdfs_truncate_on_insert - يسمح باقتطاع الملف قبل الإدراج فيه. يكون معطّلًا افتراضيًا.
  • hdfs_create_new_file_on_insert - يسمح بإنشاء ملف جديد عند كل عملية إدراج إذا كان للتنسيق لاحقة. يكون معطّلًا افتراضيًا.
  • hdfs_skip_empty_files - يسمح بتخطي الملفات الفارغة أثناء القراءة. يكون معطّلًا افتراضيًا.
آخر تعديل في ٢٥ يونيو ٢٠٢٦