تنشئ جدولًا من ملفات موجودة في 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.
مثال
- لنفترض أن لدينا عدة ملفات بعناوين 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'
- استعلم عن عدد الصفوف في هذه الملفات:
SELECT count(*)
FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV', 'name String, value UInt32')- استعلم عن عدد الصفوف في جميع ملفات هذين الدليلين:
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 - يسمح بتخطي الملفات الفارغة أثناء القراءة. يكون معطّلًا افتراضيًا.