برنامه نویسی

Duckdb ، میزهای S3 با کوه یخ با استفاده از Iceberg Rest API API

من مقاله قبلی خود را در مورد Duckberg ، ترکیبی از Pyiceberg با DuckDB برای دسترسی به میزهای Iceberg در AWS نوشتم.

اما در PI-Day (3 مارس) DuckDB پیش نمایش را با ادغام چسب بیدبرگ بومی برای خواندن و نوشتن منتشر کرد. من به شما نشان می دهم که چگونه این کار می کند

AWS ، ایجاد سطل جدول S3

  • S3 را باز کنید
  • سطل جدول را انتخاب کنید
  • یک بار ادغام با خدمات AWS Analytics را یک بار فعال کنید.
  • سطل میز ایجاد کنید
  • به آن اسم بدهید مانند testtablebucket

AWS سطل جدول S3 ایجاد کنید

AWS ، ایجاد جدول S3

  • سطل ایجاد شده را قبل از آن انتخاب کنید
  • روی ایجاد جدول با آتنا کلیک کنید
  • فضای نام را ایجاد کنید یا یک مورد موجود را انتخاب کنید. این شبیه به یک پایگاه داده چسب است ، اما یکسان نیست. ایجاد کردن testnamespace
  • شرح تصویر
  • این آتنا را باز می کند
  • اگر قبلاً این کار را نکردید ، یک سطل ایجاد کنید و کارگروه را ویرایش کنید تا از این سطل به عنوان محل خروجی استفاده کنید
  • بیانیه جدول ایجاد را اجرا کنید
  • شرح تصویر
CREATE TABLE `testnamespace`.daily_sales (
sale_date date, 
product_category string, 
sales_amount double)
PARTITIONED BY (month(sale_date))
TBLPROPERTIES ('table_type' = 'iceberg')
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • یک پرس و جو جدید برای وارد کردن برخی از مقادیر آزمون ایجاد کنید
INSERT INTO daily_sales
VALUES
(DATE '2024-01-15', 'Laptop', 900.00),
(DATE '2024-01-15', 'Monitor', 250.00),
(DATE '2024-01-16', 'Laptop', 1350.00),
(DATE '2024-02-01', 'Monitor', 300.00),
(DATE '2024-02-01', 'Keyboard', 60.00),
(DATE '2024-02-02', 'Mouse', 25.00),
(DATE '2024-02-02', 'Laptop', 1050.00),
(DATE '2024-02-03', 'Laptop', 1200.00),
(DATE '2024-02-03', 'Monitor', 375.00);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • آزمایش کنید که داده ها به درستی بارگیری شده اند
SELECT 
product_category,
COUNT(*) as units_sold,
SUM(sales_amount) as total_revenue,
AVG(sales_amount) as average_price
FROM daily_sales
WHERE sale_date BETWEEN DATE '2024-02-01' and DATE '2024-02-29'
GROUP BY product_category
ORDER BY total_revenue DESC;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

duckdb ، راه اندازی

این به دنبال وبلاگ DuckDB است.

اعتبار را در کنسول خود تنظیم کنید. export AWS_PROFILE=myuser یا اعتبار کلیدی AWS

اطمینان حاصل کنید که DuckDB 1.21 یا جدیدتر نصب شده اید.

WebInterface جدید DuckDB را با: duckdb -ui

شرح تصویر

FORCE INSTALL aws FROM core_nightly;
FORCE INSTALL httpfs FROM core_nightly;
FORCE INSTALL iceberg FROM core_nightly;

CREATE SECRET (
    TYPE s3,
    PROVIDER credential_chain
);


ATTACH 'arn:aws:s3tables:eu-west-1::bucket/testtablebucket'
    AS s3_tables_db (
        TYPE iceberg,
        ENDPOINT_TYPE s3_tables
    );
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

شناسه حساب خود را جایگزین کنید و از سطل صحیح جدول S3 استفاده کنید

دویدن SHOW ALL TABLES; برای مشاهده جداول داخلی و جداول S3 موجود

شرح تصویر

duckdb ، داده های پرس و جو

اجرا: FROM s3_tables_db.testnamespace.daily_sales;

شرح تصویر

duckdb ، داده ها را تغییر دهید

در Blogpost گزینه ای برای استفاده از Alter Table وجود دارد ، با کمال تاسف من هنوز دریافت می کنم: Not implemented Error: Alter Schema Entry

alter table s3_tables_db.testnamespace.daily_sales 
add column test STRING;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

شاید این فقط در روش استراحت کوه یخ کار کند.

duckdb ، کاتالوگ را از طریق کوه یخ وصل کنید

مراحل قبل از دسترسی به جداول به طور مستقیم روی میزهای S3 ، اما آخرین برنامه همچنین از API Iceberg REST از CATALOG GLUE/AWS Sagemaker Lakehouse پشتیبانی می کند تا از طریق یک روش استاندارد به داده ها دسترسی پیدا کند

ATTACH '311141556126:s3tablescatalog/testnamespace'
    AS glue_db (
        TYPE iceberg,
        ENDPOINT_TYPE glue
    );
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

show all tables;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

به من می دهد:

IO Error: Failed to query https://glue.eu-central-1.amazonaws.com/iceberg/v1/catalogs/311141556126:s3tablescatalog:testnamespace/namespaces, http error 404 thrown. Message: {"error":{"code":404,"message":"Catalog not found.","type":"EntityNotFoundException"}}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

فیلمنامه Pyiceberg من فقط داده های چسب را نیز می بیند. فضای نام S3Table نیست.

    region = 'eu-west-1'

    rest_catalog = load_catalog(
    "testnamespace",
    **{
        "type": "rest",
        "uri": f"https://glue.{region}.amazonaws.com/iceberg",
             "rest.sigv4-enabled": "true",
               "rest.signing-name": "glue",
              "rest.signing-region": region
    }
    )
    print(rest_catalog.list_namespaces())
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

زمان برخی تحقیقات بیشتر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا