Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

كيفية إدخال ملفات Parquet من حاوية S3

إدخال ملفات 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

Navigation