إدخال ملفات Parquet من حاوية S3
فيما يلي بعض الأساسيات حول استخدام محرك جدول S3 لقراءة ملفات Parquet.
-
أنشئ مفتاح الوصول والمفتاح السري لمستخدم خدمة IAM. فعادةً لا يصلح مستخدمو تسجيل الدخول العاديون، لأنهم قد يكونون مُهيّئين بسياسة MFA.
-
اضبط الأذونات في السياسة بحيث تسمح لمستخدم الخدمة بالوصول إلى الحاوية والمجلدات.
فيما يلي مثال بسيط جدًا يمكنك استخدامه لاختبار آلية الوصول إلى ملفات Parquet بنجاح قبل تطبيق ذلك على بياناتك الفعلية.
إذا كنت بحاجة إلى مثال على إنشاء مستخدم وحاوية، فيمكنك اتباع القسمين الأولين (إنشاء مستخدم وإنشاء حاوية): دمج S3 مع ClickHouse
لقد استخدمت ملفًا نموذجيًا من هنا: https://github.com/Teradata/kylo/tree/master/samples/sample-data/parquet ورفعته إلى حاوية الاختبار الخاصة بي
يمكنك ضبط السياسة على الحاوية بشكل مشابه لما يلي: (عدّل حسب الحاجة، فهذا المثال يمنح امتيازات واسعة نسبيًا، لكنه سيساعد في الاختبار. ويمكنك تضييق الأذونات حسب الحاجة)
{
"Version": "2012-10-17",
"Id": "Policy123456",
"Statement": [
{
"Sid": "abc123",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::1234567890:user/mars-s3-user"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::mars-doc-test",
"arn:aws:s3:::mars-doc-test/*"
]
}
]
}يمكنك تشغيل الاستعلامات بهذا النوع من الصياغة باستخدام محرك جدول S3: https://clickhouse.com/docs/sql-reference/table-functions/s3/
clickhouse-cloud :) select count(*) from s3('https://mars-doc-test.s3.amazonaws.com/s3-parquet-test/userdata1.parquet','ABC123', 'abc+123', 'Parquet', 'first_name String');
SELECT count(*)
FROM s3('https://mars-doc-test.s3.amazonaws.com/s3-parquet-test/userdata1.parquet', 'ABC123', 'abc+123', 'Parquet', 'first_name String')
Query id: fd4f1193-d604-4ac0-9a46-bdd2d5e14727
┌─count()─┐
│ 1000 │
└─────────┘
1 row in set. Elapsed: 1.274 sec. Processed 1.00 thousand rows, 14.64 KB (784.81 rows/s., 11.49 KB/s.)مرجع أنواع البيانات لتنسيق Parquet موجود هنا: https://clickhouse.com/docs/interfaces/formats/#data-format-parquet
لاستيراد البيانات إلى جدول ClickHouse أصلي:
أنشئ الجدول على نحوٍ مماثل لما يلي (وقد اخترنا فقط بضعة أعمدة من ملف Parquet):
clickhouse-cloud :) CREATE TABLE my_parquet_table (id UInt64, first_name String) ENGINE = MergeTree ORDER BY id;
CREATE TABLE my_parquet_table
(
`id` UInt64,
`first_name` String
)
ENGINE = MergeTree
ORDER BY id
Query id: 412e3994-bf8e-444e-ac43-a7c82642b7da
Ok.
0 rows in set. Elapsed: 0.600 sec.اختر البيانات من حاوية S3 لإدراجها في الجدول الجديد:
clickhouse-cloud :) INSERT INTO my_parquet_table (id, first_name) SELECT id, first_name FROM s3('https://mars-doc-test.s3.amazonaws.com/s3-parquet-test/userdata1.parquet', 'ABC123','abc+123', 'Parquet', 'id UInt64, first_name String') FORMAT Parquet
INSERT INTO my_parquet_table (id, first_name) SELECT
id,
first_name
FROM s3('https://mars-doc-test.s3.amazonaws.com/s3-parquet-test/userdata1.parquet', 'ABC123', 'abc+123', 'Parquet', 'id UInt64, first_name String')
Query id: c3cdc871-f338-462d-8797-6751b45a0b58
Ok.
0 rows in set. Elapsed: 1.220 sec. Processed 1.00 thousand rows, 22.64 KB (819.61 rows/s., 18.56 KB/s.)تحقّق من عملية الاستيراد:
clickhouse-cloud :) SELECT * FROM my_parquet_table LIMIT 10;
SELECT *
FROM my_parquet_table
LIMIT 10
Query id: 1ccf59dd-d804-46a9-aadd-ed5c57b9e1a0
┌─id─┬─first_name─┐
│ 1 │ Amanda │
│ 2 │ Albert │
│ 3 │ Evelyn │
│ 4 │ Denise │
│ 5 │ Carlos │
│ 6 │ Kathryn │
│ 7 │ Samuel │
│ 8 │ Harry │
│ 9 │ Jose │
│ 10 │ Emily │
└────┴────────────┘عندما تصبح مستعدًا لاستيراد بياناتك الفعلية، يمكنك استخدام بعض الصياغات الخاصة مثل أحرف البدل والنطاقات لتحديد المجلدات والمجلدات الفرعية والملفات داخل الحاوية. أنصحك بتطبيق filter على بضعة مجلدات وملفات لاختبار الاستيراد أولًا، مثل سنة معيّنة، أو شهرين، أو نطاق زمني محدد.
إلى جانب خيارات المسار هنا، أُضيفت حديثًا الصياغة **، وهي تحدد جميع المجلدات الفرعية بشكل تكراري.
https://clickhouse.com/docs/sql-reference/table-functions/s3/
على سبيل المثال، بافتراض أن المسارات وبنية الحاوية تبدو على النحو التالي:
https://your_s3_bucket.s3.amazonaws.com/<your_folder>/<year>/<month>/<day>/<filename>.parquet
https://mars-doc-test.s3.amazonaws.com/system_logs/2022/11/01/my-app-logs-0001.parquet
سيؤدي ذلك إلى جلب جميع الملفات الخاصة باليوم الأول من كل شهر خلال 2021-2022
https://mars-doc-test.s3.amazonaws.com/system_logs/{2021-2022}/**/01/*.parquet