{"id":22704,"date":"2026-04-19T06:36:41","date_gmt":"2026-04-19T06:36:41","guid":{"rendered":"https:\/\/umang.pk\/2026\/04\/19\/%d8%a8%d9%84%da%a9-%d8%a7%d8%af%d8%ae%d8%a7%d9%84-%da%a9%db%92-%d9%84%db%8c%db%92-%d8%a7%d9%88%d9%be%d9%86-%d8%b3%d9%88%d8%b1%d8%b3-%da%88%db%8c%d9%b9%d8%a7-%d9%84%db%8c%da%a9-%da%a9%db%8c%d8%b3%db%92\/"},"modified":"2026-04-19T06:36:48","modified_gmt":"2026-04-19T06:36:48","slug":"%d8%a8%d9%84%da%a9-%d8%a7%d8%af%d8%ae%d8%a7%d9%84-%da%a9%db%92-%d9%84%db%8c%db%92-%d8%a7%d9%88%d9%be%d9%86-%d8%b3%d9%88%d8%b1%d8%b3-%da%88%db%8c%d9%b9%d8%a7-%d9%84%db%8c%da%a9-%da%a9%db%8c%d8%b3%db%92","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/04\/19\/%d8%a8%d9%84%da%a9-%d8%a7%d8%af%d8%ae%d8%a7%d9%84-%da%a9%db%92-%d9%84%db%8c%db%92-%d8%a7%d9%88%d9%be%d9%86-%d8%b3%d9%88%d8%b1%d8%b3-%da%88%db%8c%d9%b9%d8%a7-%d9%84%db%8c%da%a9-%da%a9%db%8c%d8%b3%db%92\/","title":{"rendered":"\u0628\u0644\u06a9 \u0627\u062f\u062e\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0648\u067e\u0646 \u0633\u0648\u0631\u0633 \u0688\u06cc\u0679\u0627 \u0644\u06cc\u06a9 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4"},"content":{"rendered":"\n<div id=\"\">\n<p>\u0688\u06cc\u0679\u0627 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0628\u0646\u0627\u0646\u0627 \u06a9\u0644\u0627\u0624\u0688 \u0688\u06cc\u0679\u0627 \u0627\u06cc\u0646\u0627\u0644\u06cc\u0679\u06a9\u0633 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645\u0632 \u062c\u06cc\u0633\u06d2 Databricks\u060c Snowflake\u060c \u0627\u0648\u0631 BigQuery \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u0633\u0627\u0646 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0686\u06be\u0648\u0679\u06cc \u0633\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646\u06d2 \u062f\u0631\u062c\u06d2 \u06a9\u06cc \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0648\u0633\u06cc\u0639 \u0627\u0648\u0631 \u062a\u0648\u0633\u06cc\u0639 \u06a9\u06d2 \u0632\u0628\u0631\u062f\u0633\u062a \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u067e\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0644\u06cc\u06a9\u0646 \u062a\u062c\u0627\u0631\u062a \u06a9\u0627 \u0645\u0642\u0635\u062f \u0635\u0631\u0641 \u0622\u0641 \u0633\u0627\u0626\u0679 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06a9\u0648 \u0644\u06cc\u0632 \u067e\u0631 \u062f\u06cc\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u06cc\u06ba \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 \u0627\u0648\u0631 \u062d\u0641\u0627\u0638\u062a\u06cc \u0633\u0637\u062d \u06a9\u06d2 \u0639\u0644\u0627\u0642\u06d2 \u0628\u06be\u06cc \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba \u062c\u0648 \u0645\u0644\u06a9\u06cc\u062a\u06cc \u062a\u062c\u0631\u06cc\u062f\u06cc \u0644\u0627\u06a9\u0646\u06af \u0641\u0646\u06a9\u0634\u0646\u0632 \u0627\u0648\u0631 \u0648\u06cc\u0646\u0688\u0631 \u06a9\u06cc \u0635\u0644\u0627\u062d\u06cc\u062a\u0648\u06ba \u067e\u0631 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633 \u0622\u0631\u0679\u06cc\u06a9\u0644 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u06d2 \u0627\u0648\u067e\u0646 \u0633\u0648\u0631\u0633 \u0688\u06cc\u0679\u0627 \u0644\u06cc\u06a9 \u0627\u0633\u0679\u06cc\u06a9 \u067e\u0631 \u0627\u06cc\u06a9 \u0628\u06cc\u0686 \u0627\u062f\u062e\u0627\u0644 \u06a9\u06cc \u062a\u06c1\u06c1 \u0642\u0627\u0626\u0645 \u06a9\u06cc \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u06c1\u0645 \u062a\u0645\u0627\u0645 \u0627\u062c\u0632\u0627\u0621 \u06a9\u06d2 \u0645\u0627\u0644\u06a9 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u0648\u062c\u06c1 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0645\u062d\u062f\u0648\u062f \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4 \u0622\u0626\u06cc\u06d2 \u0627\u062f\u062e\u0627\u0644 \u06a9\u06cc \u062a\u06c1\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0622\u062e\u0631 \u0633\u06d2 \u0622\u062e\u0631 \u062a\u06a9 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u06c1\u0645 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u0628\u0646\u06cc\u0627\u062f \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u062c\u0648 \u0627\u0633 \u067e\u0631\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0633\u06cc \u0627\u06cc\u06a9 \u0679\u0648\u0644 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631\u060c \u062a\u062c\u0632\u06cc\u0627\u062a\u060c \u06af\u0648\u0631\u0646\u0646\u0633\u060c \u0627\u0648\u0631 \u0627\u0633\u0679\u0631\u06cc\u0645 \u067e\u0631\u0648\u0633\u06cc\u0633\u0646\u06af \u0633\u0645\u06cc\u062a \u0645\u0633\u062a\u0642\u0628\u0644 \u0645\u06cc\u06ba \u062a\u0648\u0633\u06cc\u0639 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06d2 \u06af\u06cc\u06d4 \u06c1\u0645 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u06cc \u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc\u0648\u06ba \u06a9\u0627 \u0628\u06be\u06cc \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u06cc\u0633\u06d2 \u063a\u0644\u0637 \u06a9\u0646\u0641\u06cc\u06af\u0631\u0688 \u06a9\u06cc\u0679\u0644\u0627\u06af\u060c NULL \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0644\u06a9\u06be\u06cc \u06af\u0626\u06cc \u067e\u0627\u0631\u0679\u06cc\u0634\u0646 \u0648\u06cc\u0644\u06cc\u0648\u0632\u060c \u0627\u0648\u0631 Python \u0648\u0631\u0698\u0646 \u06a9\u06cc \u0645\u0645\u0627\u062b\u0644\u062a\u06d4<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u06c1\u0648\u06af\u0627:<\/p>\n<ul>\n<li>\n<p>\u0627\u06cc\u06a9 \u0648\u0631\u06a9\u0646\u06af \u0633\u0646\u06af\u0644 \u0646\u0648\u0688 \u0688\u06cc\u0679\u0627 \u0644\u06cc\u06a9 \u062c\u0648 RustFS (\u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c)\u060c \u0627\u067e\u0627\u0686\u06cc \u0622\u0626\u0633 \u0628\u0631\u06af (\u0679\u06cc\u0628\u0644\u0648\u0644\u0631) \u0627\u0648\u0631 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0646\u06cc\u0633\u06cc (\u06a9\u06cc\u0679\u0644\u0627\u06af) \u067e\u0631 \u0628\u0646\u06cc \u06c1\u06d2\u060c \u062c\u0648 \u0688\u0648\u06a9\u0631 (\u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646) \u067e\u0631 \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>Apache Airflow \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0631\u0628\u0648\u0637 \u0627\u06cc\u06a9 \u0628\u06cc\u0686 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u062c\u0648 PySpark \u062c\u0627\u0628\u0632 \u0686\u0644\u0627\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u0648\u0631\u0698\u0646 \u0634\u062f\u06c1 \u0627\u0648\u0631 \u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u06c1 \u0622\u0626\u0633 \u0628\u0631\u06af \u0679\u06cc\u0628\u0644\u0632 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06d2 \u0627\u062f\u062e\u0627\u0644 \u06a9\u06d2 \u0646\u0645\u0648\u0646\u06d2\u060c \u0631\u06cc\u0688\u06cc\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0633\u06d2 \u0688\u06cc\u06a9\u067e\u0644 \u0627\u06cc\u06a9 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0648\u06cc\u0628 \u0633\u06a9\u0631\u06cc\u067e\u0631\u060c \u0627\u0648\u0631 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0645\u06cc\u06ba \u062e\u0627\u0645 \u0688\u06cc\u0679\u0627 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u0644\u06a9\u0627 \u067e\u06be\u0644\u06a9\u0627 \u0633\u06af\u0646\u0644 \u0679\u06cc\u0628\u0644\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06cc\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u0646\u0638\u0631 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u06cc\u0627 \u0646\u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06c1\u0645 \u0627\u0633\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0688\u0627\u0644\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06cc\u0627 \u0634\u0627\u0645\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u062f\u0627\u0626\u0631\u06c1 \u06a9\u0627\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0644\u0641\u0638: \u06cc\u06c1 ELT (\u0688\u06cc\u0679\u0627 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u0627) \u06a9\u0627 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0628\u062f\u06cc\u0644\u06cc (dbt\u060c Spark SQL) \u0627\u0648\u0631 \u062a\u062c\u0632\u06cc\u0627\u062a (Trino\u060c Superset) \u0642\u062f\u0631\u062a\u06cc \u0627\u06af\u0644\u06cc \u067e\u0631\u062a\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u0645\u0636\u0645\u0648\u0646 \u06a9\u06d2 \u062f\u0627\u0626\u0631\u06c1 \u06a9\u0627\u0631 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u06c1\u06cc\u06ba\u06d4 \u062c\u0648 \u062a\u0645 \u06cc\u06c1\u0627\u06ba \u0628\u0646\u0627\u062a\u06d2 \u06c1\u0648 \u0648\u06c1 \u0628\u0646\u06cc\u0627\u062f \u06c1\u06d2 \u062c\u0633 \u067e\u0631 \u0648\u06c1 \u0628\u06cc\u0679\u06be\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<h3 id=\"heading-what-well-cover\">\u06c1\u0645 \u06a9\u06cc\u0627 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u06cc\u06ba \u06af\u06d2:<\/h3>\n<h2 id=\"heading-the-ingestion-problem\">\u0627\u0646\u0679\u06cc\u06a9 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644<\/h2>\n<p>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0645\u0639\u0627\u0645\u0644\u0627\u062a \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0633\u0679\u06cc\u06a9\/\u062d\u0644 \u06a9\u06cc \u0633\u0627\u062e\u062a \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u06d2\u06d4 \u0627\u0639\u0644\u06cc\u0670 \u0633\u0637\u062d \u06a9\u0627 \u0645\u0642\u0635\u062f \u0631\u062c\u062d\u0627\u0646 \u06a9\u06d2 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0645\u0627\u0631\u06a9\u06cc\u0679 APIs \u0633\u06d2 \u0645\u0627\u0644\u06cc\u0627\u062a\u06cc \u0688\u06cc\u0679\u0627 \u0627\u06a9\u0679\u06be\u0627 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u06c1\u0645 \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0632\u06cc\u062f \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u0648 \u06af\u0648\u062f\u0627\u0645 \u0645\u06cc\u06ba \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u067e\u0631 \u062a\u0648\u062c\u06c1 \u0645\u0631\u06a9\u0648\u0632 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0688\u06cc\u0679\u0627 \u0627\u06cc\u06a9 \u0648\u06cc\u0628 \u06a9\u0631\u0627\u0644\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06a9\u0679\u06be\u0627 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0634\u0631\u062d \u0641\u06cc \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u062d\u062f \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0628\u06cc\u0686 \u067e\u0631\u0648\u0633\u06cc\u0633\u0646\u06af \u0645\u06cc\u06ba\u060c \u0679\u0627\u0626\u0645 \u0628\u06cc\u0633\u0688 \u067e\u0627\u0631\u0679\u06cc\u0634\u0646\u0646\u06af \u0688\u0627\u0648\u0646 \u0627\u0633\u0679\u0631\u06cc\u0645 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u067e\u0631\u0648\u0633\u06cc\u0633\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u062b\u0631 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06a9\u0644\u06cc\u0646\u0631 \u0688\u06cc\u0679\u0627 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0628\u06be\u06cc \u062d\u0645\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0631\u0627\u0644\u0631 \u0627\u06cc\u06a9 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0639\u0645\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0631\u06cc\u0688\u06cc\u0633 \u0679\u0627\u0633\u06a9 \u06a9\u06cc\u0648 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0633\u06d2 \u0627\u0644\u06af \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0622\u0631\u06a9\u06cc\u0633\u0679\u0631\u06cc\u0634\u0646 \u067e\u0631\u062a \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u06a9\u06cc \u0634\u0631\u062d \u06a9\u0648 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0631\u06cc\u0646\u06af\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0644\u0627\u0626\u0641 \u0633\u0627\u0626\u06cc\u06a9\u0644\u0648\u06ba \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u06c1\u0631 \u062c\u0632\u0648 \u06a9\u0648 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u0646\u06d2 \u0627\u0648\u0631 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u062f\u062e\u0627\u0644 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646\u060c \u0631\u06cc\u0646\u06af\u0646\u06d2 \u06a9\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0642\u0627\u0628\u0644\u06cc\u062a \u06a9\u06cc \u06a9\u0645\u06cc \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u0627\u0639\u0644\u06cc\u0670 \u0628\u06be\u0631\u0648\u0633\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0688\u06cc\u0679\u0627 \u0644\u06cc\u0646\u0688\u0646\u06af \u06a9\u0648 \u062a\u0631\u062c\u06cc\u062d \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-stack\">\u0627\u0633\u0679\u06cc\u06a9<\/h2>\n<ul>\n<li>\n<p><strong>\u0645\u0648\u0631\u0686\u0627 FS<\/strong><strong>:<\/strong> S3-\u0645\u0637\u0627\u0628\u0642 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u0633\u0679\u0648\u0631 \u062c\u0648 \u0632\u0646\u06af \u0645\u06cc\u06ba \u0644\u06a9\u06be\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0646\u06cc\u0633\u06cc<\/strong><strong>:<\/strong> \u0627\u067e\u0627\u0686\u06cc \u0622\u0626\u0633 \u0628\u0631\u06af \u0679\u06cc\u0628\u0644\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u067e\u0627\u0686\u06cc \u0686\u0646\u06af\u0627\u0631\u06cc<\/strong><strong>:<\/strong> \u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u06c1 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0646\u06af \u0627\u0646\u062c\u0646<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u067e\u0627\u0686\u06cc \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648<\/strong><strong>:<\/strong> \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0627 \u0634\u06cc\u0688\u0648\u0644 \u0627\u0648\u0631 \u06a9\u0648\u0622\u0631\u0688\u06cc\u0646\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>jupyter \u0646\u0648\u0679 \u0628\u06a9<\/strong> <em>(\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/em>: \u0622\u0626\u0633 \u0628\u0631\u06af \u0679\u06cc\u0628\u0644\u0632 \u067e\u0631 \u0627\u06cc\u0688\u06c1\u0627\u06a9 \u0627\u0633\u067e\u0627\u0631\u06a9 \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u0627\u0633 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0633\u06a9\u0631\u06cc\u067e\u0644\u0688\u06cc\u0632:<\/strong> \u0648\u06cc\u0628 \u06a9\u0631\u0627\u0644\u0631 \u06a9\u06cc \u0679\u0627\u0633\u06a9 \u0642\u0637\u0627\u0631<\/p>\n<\/li>\n<li>\n<p><strong>\u0633\u06a9\u0631\u06cc\u067e \u0645\u06cc\u0679\u0644 \u0648\u0631\u06a9\u0631:<\/strong> \u0648\u06cc\u0628 \u06a9\u0631\u0627\u0644\u0631 \u0627\u0648\u0631 \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0627\u0631\u06a9\u0646<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u0633 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u0627 \u062a\u062c\u0631\u0628\u06c1 4-core x86\/AMD CPU\u060c 16GB RAM\u060c 60GB \u0688\u0633\u06a9 GCP VM \u0686\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 Debian GNU\/Linux 11 (Bullsey) \u067e\u0631 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 \u0622\u067e \u06a9\u0648 \u06a9\u0645\u067e\u0648\u0632 v2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0688\u0648\u06a9\u0631 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u0648 \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u06d2 \u0644\u06cc\u0646\u06a9\u0633 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0645\u0644\u062a\u06d2 \u062c\u0644\u062a\u06d2 \u06cc\u0627 \u0628\u06c1\u062a\u0631 \u062a\u0635\u0631\u06cc\u062d\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h2 id=\"heading-system-overview\">\u0633\u0633\u0679\u0645 \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1<\/h2>\n<p>\u06a9\u0631\u0627\u0644\u0631 \u0627\u06cc\u06a9 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0639\u0645\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0631\u06cc\u0688\u06cc\u0633 \u0679\u0627\u0633\u06a9 \u06a9\u06cc\u0648 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0633\u06d2 \u0627\u0644\u06af \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u06a9\u0627\u0645 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0648 \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u067e\u0648\u0627\u0626\u0646\u0679\u0633\u060c \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u06d2 \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631\u0632\u060c \u0627\u0648\u0631 \u0645\u0646\u0632\u0644 \u06a9\u06d2 \u0631\u0627\u0633\u062a\u0648\u06ba \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u062f\u06be\u06a9\u06cc\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0631\u0627\u0644\u0631 \u0627\u0633\u06d2 \u0627\u0679\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u06a9\u0631\u0627\u0644 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062e\u0627\u0645 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u067e\u0631 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0639\u0644\u06cc\u062d\u062f\u06af\u06cc \u0634\u0631\u062d \u06a9\u0648 \u0645\u062d\u062f\u0648\u062f \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0644\u0627\u0626\u0641 \u0633\u0627\u0626\u06cc\u06a9\u0644 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u0622\u0631\u06a9\u06cc\u0633\u0679\u0631\u06cc\u0634\u0646 \u067e\u0631\u062a \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u0648\u06ba \u06a9\u0648 \u0627\u0644\u06af \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0631\u0627\u0644 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0642\u0627\u0628\u0644\u06cc\u062a \u06a9\u0627 \u0641\u0642\u062f\u0627\u0646 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u06a9\u0631\u0627\u0644 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc\u0648\u06ba \u06a9\u0627 \u0627\u0632\u0627\u0644\u06c1 \u06a9\u0631\u0646\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u0634\u06a9\u0644 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0631\u0627\u0644 \u06a9\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0631\u0627\u0644 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0622\u0632\u0645\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-quick-start\">\u0641\u0648\u0631\u06cc \u0622\u063a\u0627\u0632<\/h2>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0627\u0633 \u0645\u0646\u0635\u0648\u0628\u06d2 \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba.<\/p>\n<pre><code class=\"language-bash\"># Clone the repository\ngit clone https:\/\/github.com\/ps-mir\/data-platform\n\n# Create the shared Docker network\ndocker network create data-platform\n\n# Create host directories, set permissions, and download Spark JARs\nchmod +x init.sh && .\/init.sh\n<\/code><\/pre>\n<p>\u0633\u0631\u0648\u0633 \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba (\u0634\u0679 \u0688\u0627\u0624\u0646 \u0627\u0644\u0679 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u06c1\u06d2):<\/p>\n<ol>\n<li><strong>\u0645\u0648\u0631\u0686\u0627 FS<\/strong><\/li>\n<\/ol>\n<pre><code class=\"language-bash\">cd rustfs && docker compose up -d\n<\/code><\/pre>\n<ol>\n<li><strong>\u0686\u0627\u0631 \u0628\u062c\u06d2<\/strong><\/li>\n<\/ol>\n<pre><code class=\"language-bash\">cd nessie && docker compose up -d\n<\/code><\/pre>\n<ol>\n<li><strong>\u0634\u0639\u0644\u06c1<\/strong> &#8211; \u067e\u06c1\u0644\u06d2 \u0631\u0646 \u067e\u0631 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">cd spark && docker compose build && docker compose up -d\n<\/code><\/pre>\n<ol>\n<li><strong>\u0633\u06a9\u0631\u06cc\u067e \u0644\u06cc\u0688\u06cc\u0632<\/strong><\/li>\n<\/ol>\n<pre><code class=\"language-bash\">cd scrapredis && docker compose up -d\n<\/code><\/pre>\n<ol>\n<li><strong>\u06c1\u0648\u0627 \u06a9\u0627 \u06a9\u0631\u0646\u0679<\/strong> &#8211; \u067e\u06c1\u0644\u06d2 \u0631\u0646 \u067e\u0631 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">cd airflow-docker && docker compose build && docker compose up -d\n<\/code><\/pre>\n<p>Nessie \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0686\u0644\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f Nessie \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">curl -X POST http:\/\/localhost:19120\/iceberg\/v1\/main\/namespaces \n  -H \"Content-Type: application\/json\" \n  -d '{\"namespace\": [\"default\"]}'\n\ncurl -X POST http:\/\/localhost:19120\/iceberg\/v1\/main\/namespaces \n  -H \"Content-Type: application\/json\" \n  -d '{\"namespace\": [\"scraper\"]}'\n<\/code><\/pre>\n<p>\u0633\u06a9\u0631\u06cc\u067e \u0648\u0631\u06a9\u0631 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0645\u06cc\u0632\u0628\u0627\u0646 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2 (\u0688\u0627\u06a9\u0631\u0627\u0626\u0632\u0688 \u0646\u06c1\u06cc\u06ba)\u06d4 \u0627\u0632\u06af\u0631 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 >=3.14\u06d4<\/p>\n<pre><code class=\"language-bash\">cd scrapworker\npip install -e .\nCONFIG_PATH=.\/config\/config.local.yaml RUSTFS_ACCESS_KEY=rustfsadmin RUSTFS_SECRET_KEY=rustfsadmin python -m scrapworker\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0648 \u0633\u06a9\u0631\u06cc\u067e \u0648\u0631\u06a9\u0631 \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0686\u0644\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>scraper_pipeline_v1<\/code> \u06c1\u0648\u0627 \u06a9\u06d2 \u0628\u06c1\u0627\u0624 \u0633\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0627\u0645 \u06a9\u0648 \u0627\u0679\u06be\u0627\u0626\u06d2 \u06af\u06cc \u0627\u0648\u0631 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u06a9\u0627\u0631\u06a9\u0646 \u06a9\u06d2 \u0627\u0633\u06d2 \u063a\u06cc\u0631 \u0645\u0639\u06cc\u0646\u06c1 \u0645\u062f\u062a \u062a\u06a9 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u062f\u06be\u06a9\u06cc\u0644 \u062f\u06d2 \u06af\u06cc\u06d4 <code>wait_for_completion<\/code>.<\/p>\n<p>Trino \u0628\u06be\u06cc \u0642\u0627\u0626\u0645 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 Nessie \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0646\u0636\u0645\u0627\u0645 \u06a9\u0627 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u062a\u062c\u0631\u0628\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-running-the-pipelines\">\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u067e\u0631 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f<\/h2>\n<p>\u0627\u0633\u0679\u06cc\u06a9 \u06a9\u06d2 \u0686\u0644\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u06af\u0644\u0627 \u0645\u0631\u062d\u0644\u06c1 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0645\u06cc\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u0686\u0627\u0644\u0648 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u062a\u0645\u0627\u0645 DAGs \u062a\u062e\u0644\u06cc\u0642 \u06a9\u06d2 \u0628\u0639\u062f \u0628\u0637\u0648\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0645\u0648\u0642\u0648\u0641 \u06c1\u06cc\u06ba\u06d4 \u0686\u0627\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u06cc\u06ba \u067e\u06cc\u0686\u06cc\u062f\u06c1 \u0637\u0631\u06cc\u0642\u0648\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u067e\u0631 \u0628\u0646\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u0627 \u062a\u06cc\u0632 \u062a\u0631\u06cc\u0646 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06af\u0644\u06cc \u067e\u0631\u062a \u067e\u0631 \u062c\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u0679\u06cc\u06a9 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u0631 \u067e\u0631\u062a \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062c\u0691\u06cc \u06c1\u0648\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0686\u0627\u0631\u0648\u06ba \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u06cc\u06ba \u0628\u06be\u0631\u06cc \u06c1\u0648\u0626\u06cc \u06c1\u06cc\u06ba \u0644\u06cc\u06a9\u0646 \u0628\u0637\u0648\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0645\u0648\u0642\u0648\u0641 \u06c1\u06cc\u06ba\u06d4 \u0679\u0631\u06af\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 UI \u0645\u06cc\u06ba \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0648 \u0628\u0646\u062f \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/04\/1776580601_542_\u0628\u0644\u06a9-\u0627\u062f\u062e\u0627\u0644-\u06a9\u06d2-\u0644\u06cc\u06d2-\u0627\u0648\u067e\u0646-\u0633\u0648\u0631\u0633-\u0688\u06cc\u0679\u0627-\u0644\u06cc\u06a9-\u06a9\u06cc\u0633\u06d2-\u0628\u0646\u0627\u06cc\u0627.png\" alt=\"\u062a\u0645\u0627\u0645 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0632\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0622\u0626\u06cc\u06d2 \u06c1\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-sparkstaticdatav1skeleton-hello-dag\">Spark_static_data_v1_skeleton: \u06c1\u06cc\u0644\u0648 \u0688\u06cc \u0627\u06d2 \u062c\u06cc<\/h3>\n<p>\u06cc\u06c1 \u0627\u0633\u067e\u0627\u0631\u06a9 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u06cc\u06a9 \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u0688\u06cc \u0627\u06d2 \u062c\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0627\u0632\u06af\u0631 \u06a9\u0627 \u06a9\u0627\u0645 \u06c1\u06d2 \u062c\u0648 \u067e\u06cc\u063a\u0627\u0645 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u06cc\u06c1 \u0633\u0628\u0632 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u06a9\u0627 \u0634\u06cc\u0688\u0648\u0644\u0631 \u0627\u0648\u0631 \u06a9\u0627\u0631\u06a9\u0646 \u0635\u062d\u062a \u0645\u0646\u062f \u06c1\u06cc\u06ba\u06d4 <code>[2026-04-09 22:00:01] INFO - Task operator:<task say_hello=\"\"\/><\/code><\/p>\n<h3 id=\"heading-sparkstaticdatav2submit-spark-submit\">Spark_static_data_v2_submit: Spark \u062c\u0645\u0639 \u06a9\u0631\u0648\u0627\u0626\u06cc\u06ba\u06d4<\/h3>\n<p>\u06cc\u06c1 PySpark \u062c\u0627\u0628\u0632 \u06a9\u0648 \u0628\u0630\u0631\u06cc\u0639\u06c1 \u062c\u0645\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>SparkSubmitOperator<\/code> \u0622\u0626\u0633 \u0628\u0631\u06af \u0679\u06cc\u0628\u0644 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062c\u0627\u0645\u062f \u0688\u06cc\u0679\u0627 \u0633\u06cc\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u06a9\u0648\u0626\u06cc \u062a\u0642\u0633\u06cc\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u06cc\u06c1 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u067e\u0686\u06be\u0644\u06d2 \u0645\u0648\u0627\u062f \u06a9\u0648 \u0627\u0648\u0648\u0631 \u0631\u0627\u0626\u0679 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0646\u06cc\u0633\u06cc \u06a9\u06cc\u0679\u0644\u0627\u06af \u0645\u06cc\u06ba \u06cc\u06c1 \u0627\u0633 \u0637\u0631\u062d \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-bash\">Type: ICEBERG_TABLE\nMetadata Location:s3:\/\/warehouse\/default\/static_data_e7e43123-95a7-44d2-b6d5-67c9c7aa4321\/metadata\/00000-08a5a2db-6f12-4f21-b2a9-de3d9123fbd3.metadata.json\n<\/code><\/pre>\n<h3 id=\"heading-sparkpartitioneddatav1-spark-partitioned\">Spark_partitioned_data_v1: Spark \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/h3>\n<p>\u06cc\u06c1 \u0648\u0642\u062a \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0631\u062d\u0644\u06c1 2 \u06a9\u0648 \u0628\u0691\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u0637\u06d2 \u0634\u062f\u06c1 \u0633\u0644\u0627\u0679 \u0648\u0642\u062a \u0633\u06d2 \u0627\u062e\u0630 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06c1\u0631 \u0639\u0645\u0644 \u06a9\u0648 \u0627\u0633 \u06a9\u06cc \u0627\u067e\u0646\u06cc \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u067e\u0631 \u0644\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>(ds, hr, min)<\/code> \u067e\u0686\u06be\u0644\u06d2 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0648 \u0686\u06be\u0648\u0626\u06d2 \u0628\u063a\u06cc\u0631 \u062a\u0642\u0633\u06cc\u0645\u06d4<\/p>\n<p>RustFS \u0645\u06cc\u06ba \u0641\u0627\u0626\u0644 \u067e\u0627\u062a\u06be \u06a9\u06cc \u0645\u062b\u0627\u0644: <code>warehouse\/default\/static_data_partitioned_b172c66f-722b-44f3-bbee-069355753ff6\/data\/ds=2026-03-28\/hr=23\/min=15\/00000-4-7a196a47-2ac0-4023-af68-ca10487fccb2-0-00001.parquet<\/code><\/p>\n<h3 id=\"heading-scraperpipelinev1-scraper-pipeline\">scraper_pipeline_v1: \u06a9\u06be\u0631\u0686\u0646\u06d2 \u0648\u0627\u0644\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646<\/h3>\n<p>\u06cc\u06c1 \u067e\u0648\u0631\u0627 \u0645\u062c\u0645\u0648\u0639\u06c1 \u0628\u06c1\u0627\u0624 \u06c1\u06d2\u06d4 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u06a9\u0627\u0645 \u06a9\u0648 \u0633\u06a9\u0631\u06cc\u067e\u0631\u06cc\u0688\u0633 \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06be\u06a9\u06cc\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633\u06a9\u0631\u06cc\u067e \u0648\u0631\u06a9\u0631 \u0628\u0627\u0626\u0646\u0646\u0633 API \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062e\u0627\u0645 \u0646\u062a\u0627\u0626\u062c RustFS \u06a9\u0648 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0633\u06af\u0646\u0644 \u06a9\u06cc \u0642\u0637\u0627\u0631 \u06a9\u0648 Nessie \u06a9\u06cc\u0679\u0644\u0627\u06af \u0645\u06cc\u06ba \u0634\u0627\u0626\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0631 \u0631\u0646 \u06a9\u0648 \u0645\u0644\u062a\u0627 \u06c1\u06d2: <code>https:\/\/api.binance.com\/api\/v3\/trades?symbol=BTCUSDT&limit=10<\/code><\/p>\n<h2 id=\"heading-setup\">\u062a\u0631\u062a\u06cc\u0628<\/h2>\n<p>\u06cc\u06c1 \u0688\u0648\u06a9\u0631 \u06a9\u0645\u067e\u0648\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0633\u0646\u06af\u0644 \u0646\u0648\u0688 \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u0633\u06cc\u0679 \u0627\u067e \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u062a\u0634\u06a9\u06cc\u0644 \u0634\u062f\u06c1 \u0628\u06cc\u0633 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u067e\u0631 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u0631\u06cc \u0679\u0627\u0631\u06af\u0679\u0646\u06af \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u062a\u06a9 \u0628\u0691\u06be\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p>\u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 HA \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646\u060c \u062c\u0627\u0631\u06cc \u0648\u0627\u0644\u06cc\u0648\u0645 \u0645\u06cc\u0646\u062c\u0645\u0646\u0679\u060c \u0627\u0648\u0631 \u06c1\u0631 \u062c\u0632\u0648 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062d\u0641\u0627\u0638\u062a\u06cc \u0633\u062e\u062a\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u0635\u0648\u06cc\u0631 \u06a9\u0648 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u0648\u0631\u0698\u0646 \u0645\u06cc\u06ba \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u06a9\u06be\u06cc\u0646\u0686\u0646\u06d2 \u067e\u0631 \u0627\u0633\u06d2 \u062e\u0627\u0645\u0648\u0634\u06cc \u0633\u06d2 \u0679\u0648\u0679\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u0627 \u062c\u0627 \u0633\u06a9\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u0645\u0627\u0645 \u06a9\u0646\u0679\u06cc\u0646\u0631\u0632 \u0627\u06cc\u06a9 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0688\u0648\u06a9\u0631 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba: <code>data-platform<\/code>\u06cc\u06c1 \u062e\u062f\u0645\u0627\u062a \u06a9\u0648 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u0648 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0646\u0627\u0645 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0646\u06c1\u06cc\u06ba <code>init.sh<\/code> \u0627\u0633\u06a9\u0631\u067e\u0679 \u0688\u06cc\u0679\u0627 \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba \u0636\u0631\u0648\u0631\u06cc \u0645\u0642\u0627\u0645\u06cc \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0631\u06cc\u0632 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0688\u0648\u06a9\u0631 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0628\u06be\u06cc \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-rustfs\">\u0645\u0648\u0631\u0686\u0627 FS<\/h3>\n<p>RustFS \u0627\u0633 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u06cc \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u067e\u0631\u062a \u06c1\u06d2\u06d4 Nessie \u06a9\u06d2 REST \u06a9\u06cc\u0679\u0644\u0627\u06af \u0645\u0648\u0688 \u06a9\u0627 S3 \u06a9\u06d2 \u0645\u0648\u0627\u0641\u0642 \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u067e\u0631 \u0633\u062e\u062a \u0627\u0646\u062d\u0635\u0627\u0631 \u06c1\u06d2\u06d4 \u0645\u0642\u0627\u0645\u06cc \u0641\u0627\u0626\u0644 \u0633\u0633\u0679\u0645 \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0686\u0644\u062a\u06d2 \u0648\u0642\u062a\u060c \u0646\u06cc\u0633\u06cc \u06c1\u06cc\u0644\u062a\u06be \u0686\u06cc\u06a9 \u0627\u0633\u0679\u0627\u0631\u0679 \u0627\u067e \u067e\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u06cc \u0634\u0631\u0648\u0639\u0627\u062a \u0645\u06cc\u06ba \u062e\u0631\u0627\u0628\u06cc \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 REST \u06a9\u06cc\u0679\u0644\u0627\u06af \u0627\u0633\u0646\u0627\u062f \u06a9\u06cc \u0641\u0631\u0648\u062e\u062a \u0627\u0648\u0631 \u0645\u0644\u0679\u06cc \u0627\u0646\u062c\u0646 \u0627\u0633\u06a9\u06cc\u0644\u0646\u06af \u06a9\u0648 \u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0646\u0626\u06d2 \u0633\u06cc\u0679 \u0627\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062f\u06c1 \u0645\u0648\u0688 \u06c1\u06d2\u06d4<\/p>\n<p>MinIO \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 S3-\u0645\u0637\u0627\u0628\u0642\u062a \u0631\u06a9\u06be\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0641\u0637\u0631\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u062a\u06be\u0627\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0632\u06cc\u0627\u062f\u06c1 \u067e\u0627\u0628\u0646\u062f\u06cc \u0648\u0627\u0644\u06d2 \u0644\u0627\u0626\u0633\u0646\u0633 \u0645\u06cc\u06ba \u0686\u0644\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 RustFS \u0627\u06cc\u06a9 \u0627\u0648\u067e\u0646 \u0633\u0648\u0631\u0633 \u0645\u062a\u0628\u0627\u062f\u0644 \u06c1\u06d2 \u062c\u0648 Rust \u0645\u06cc\u06ba \u0644\u06a9\u06be\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0642\u0627\u0645\u06cc \u0688\u0633\u06a9\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062a\u0639\u0627\u0648\u0646 \u06cc\u0627\u0641\u062a\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p>\u0644\u06a9\u06be\u0646\u06d2 \u067e\u0631\u060c Spark S3FileIO \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 Parquet \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a RustFS \u067e\u0631 \u062f\u06be\u06a9\u06cc\u0644\u062a\u0627 \u06c1\u06d2\u06d4 Nessie \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0679\u06cc\u0628\u0644 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u06a9\u0627 \u0627\u0631\u062a\u06a9\u0627\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0688\u06cc\u0679\u0627 \u0627\u0648\u0631 \u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u06cc \u062d\u0627\u0644\u062a \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba \u06cc\u0627 \u0628\u0627\u0644\u06a9\u0644 \u0646\u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u067e\u0627\u0686\u06cc \u0622\u0626\u0633 \u0628\u0631\u06af \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0636\u0645\u0627\u0646\u062a \u06c1\u06d2\u06d4 \u06cc\u0639\u0646\u06cc\u060c \u06cc\u06c1 \u0688\u06cc\u0679\u0627 \u0641\u0627\u0626\u0644\u0648\u06ba \u0627\u0648\u0631 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u062c\u0648\u06c1\u0631\u06cc \u0639\u06c1\u062f \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06cc\u0627 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u06cc\u06a9 \u0645\u0646\u0638\u0645 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0633\u0631\u0648\u0633 \u062c\u06cc\u0633\u06d2 AWS S3\u060c Google Cloud Storage\u060c \u06cc\u0627 Azure Blob Storage \u0627\u06cc\u06a9 \u0642\u062f\u0631\u062a\u06cc \u0627\u06af\u0644\u0627 \u0645\u0631\u062d\u0644\u06c1 \u06c1\u06d2\u06d4 \u0628\u0691\u06d2 \u067e\u06cc\u0645\u0627\u0646\u06d2 \u067e\u0631 \u062e\u0648\u062f \u0645\u06cc\u0632\u0628\u0627\u0646 \u0645\u062a\u0628\u0627\u062f\u0644 \u0645\u06cc\u06ba SeaweedFS\u060c Ceph\/RGW\u060c \u0627\u0648\u0631 \u06af\u06cc\u0631\u0627\u062c \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-notes\">\u062d\u0648\u0627\u0644\u06c1:<\/h4>\n<ul>\n<li>\n<p><strong>\u0628\u0627\u0644\u0679\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba:<\/strong> \u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <code>rustfs-init<\/code> \u0633\u0627\u0626\u0688 \u06a9\u0627\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>amazon\/aws-cli<\/code> RustFS \u06a9\u06d2 \u06c1\u06cc\u0644\u062a\u06be \u0686\u06cc\u06a9 \u067e\u0627\u0633 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u062c\u0646\u0631\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0686\u0644\u062a\u0627 \u06c1\u06d2: <code>s3:\/\/warehouse<\/code> \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0628\u0627\u0644\u0679\u06cc\u0627\u06ba\u06d4 \u0622\u067e \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u0627\u0644\u0679\u06cc\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0627\u062a\u06be\u0627\u0631\u0679\u06cc:<\/strong> RustFS \u0627\u06cc\u06a9 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 uid=10001 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0631\u06cc (<code>data\/rustfs\/data<\/code> \u0627\u0648\u0631 <code>data\/rustfs\/applogs<\/code>\u06a9\u0646\u0679\u06cc\u0646\u0631 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633 uid \u06a9\u06cc \u0645\u0644\u06a9\u06cc\u062a \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0648\u0631\u0646\u06c1 \u06cc\u06c1 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>init.sh<\/code> \u0627\u0633 \u0633\u06d2 \u0646\u0645\u0679\u0646\u06d2 <code>sudo chown -R 10001:10001<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627 \u062a\u0639\u06cc\u0646:<\/strong> \u06a9\u0645\u067e\u0648\u0632 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062c\u06af\u06c1 \u067e\u0631 \u067e\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2: <code>rustfs\/rustfs:1.0.0-alpha.85-glibc<\/code>. \u0627\u067e \u06af\u0631\u06cc\u0688 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 uid \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0626\u06cc \u06c1\u06d2\u06d4 <code>docker run --rm --entrypoint id rustfs\/rustfs:<new-tag\/><\/code>. \u0627\u06af\u0631 \u0627\u06cc\u0633\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>init.sh<\/code> \u0645\u062a\u0628\u0627\u062f\u0644 \u0637\u0648\u0631 \u067e\u0631\u060c \u0622\u067e \u0627\u0633\u06d2 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0627\u0648\u0646 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0633\u067e\u0627\u0631\u06a9 \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba:<\/strong> Spark S3FileIO \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0688\u06cc\u0679\u0627 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a RustFS \u067e\u0631 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 Nessie \u0635\u0631\u0641 \u06a9\u06cc\u0679\u0644\u0627\u06af \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u067e\u0631\u0627\u06a9\u0633\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0645\u0679 \u0679\u0627\u0626\u0645 \u067e\u0631 \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0648\u0642\u062a \u0646\u06c1\u06cc\u06ba \u0644\u06a9\u06be\u062a\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-nessie\">\u0686\u0627\u0631 \u0628\u062c\u06d2<\/h3>\n<p>\u06a9\u06cc\u0679\u0644\u0627\u06af \u06af\u0648\u062f\u0627\u0645 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0645\u06cc\u0632\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u06a9\u0648 \u0627\u0646 \u06a9\u06cc \u0688\u06cc\u0679\u0627 \u0641\u0627\u0626\u0644\u0648\u06ba \u0627\u0648\u0631 \u0627\u0633\u06a9\u06cc\u0645\u0627 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0627\u0633\u067e\u0627\u0631\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06af\u0648\u062f\u0627\u0645 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u0686\u06cc\u0632\u0648\u06ba \u067e\u0631 \u0645\u062a\u0641\u0642 \u06c1\u0648\u0646\u0627 \u0645\u0634\u06a9\u0644 \u06c1\u06d2\u06d4<\/p>\n<p>Hive Metastore \u0627\u06cc\u06a9 Thrift-based API \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0626\u06cc \u0633\u0627\u0644\u0648\u06ba \u0633\u06d2 \u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u0627 \u0645\u0639\u06cc\u0627\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0628\u06cc\u06a9\u0646\u06af \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u0631\u0627\u0646\u0632\u06cc\u06a9\u0634\u0646\u0644 \u0633\u06cc\u0645\u0646\u0679\u06a9\u0633 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0644\u06cc\u0646 \u062f\u06cc\u0646 \u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u06cc \u067e\u0631\u062a \u067e\u0631 \u0631\u06a9 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u06cc\u0686\u06d2 \u062f\u06cc \u06af\u0626\u06cc \u0688\u06cc\u0679\u0627 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u0645\u0679 \u06a9\u0627 \u062d\u0635\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u062f\u06cc\u06a9\u06be \u0628\u06be\u0627\u0644 \u0633\u06d2 \u0622\u06af\u06d2 \u06a9\u0648\u0626\u06cc \u06a9\u0631\u0627\u0633 \u0679\u06cc\u0628 \u06c1\u0633\u0679\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>Apache Iceberg \u0627\u0679\u0627\u0645\u06a9 \u0679\u06cc\u0628\u0644 \u06a9\u0645\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0688\u06cc\u0679\u0627 \u0627\u0648\u0631 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0641\u0631\u0642 \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u06cc\u0633\u06cc \u06af\u0679 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc\u0632 \u062c\u06cc\u0633\u06d2 \u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u0627 \u0639\u0644\u0627\u062c \u06a9\u0631\u06a9\u06d2 \u0627\u0633 \u067e\u0631 \u0627\u0633\u062a\u0648\u0627\u0631 \u06c1\u06d2\u06d4 \u06c1\u0631 \u0679\u06cc\u0628\u0644 \u062a\u062d\u0631\u06cc\u0631 \u0627\u06cc\u06a9 \u0639\u06c1\u062f \u06c1\u06d2\u06d4 \u0622\u067e \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0679\u06cc\u0628\u0644\u0632 \u067e\u0631 \u062c\u0648\u06c1\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u0631\u0627\u0646\u0686\u060c \u0679\u06cc\u06af \u0627\u0648\u0631 \u0631\u0648\u0644 \u0628\u06cc\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>Spark Nessie&#8217;s Iceberg REST \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0679\u06cc\u0628\u0644 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u067e\u0691\u06be\u062a\u0627 \u0627\u0648\u0631 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06cc\u0679\u0644\u0627\u06af \u062d\u0627\u0644\u062a \u067e\u0648\u0633\u0679\u06af\u0631\u06cc\u0633 \u067e\u0631 \u0628\u0631\u0642\u0631\u0627\u0631 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u0648\u062c\u06c1 \u0633\u06d2 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u06a9\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0628\u0631\u0642\u0631\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-namespace-bootstrap\">\u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u0628\u0648\u0679\u0633\u0679\u0631\u06cc\u067e<\/h4>\n<p>Hive Metastore \u06a9\u06d2 \u0628\u0631\u0639\u06a9\u0633\u060c Nessie \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 RustFS \u067e\u0631 \u0688\u06cc\u0679\u0627 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0644\u06a9\u06be\u06d2 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u06cc\u06a9 \u063a\u06cc\u0631 \u0645\u0648\u062c\u0648\u062f \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u067e\u0631 \u0679\u06cc\u0628\u0644 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06cc\u060c \u0627\u0648\u0631 \u06cc\u062a\u06cc\u0645 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0628\u063a\u06cc\u0631 \u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u06d2 \u0627\u0646\u062f\u0631\u0627\u062c\u0627\u062a \u06a9\u06d2 \u0631\u06c1 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06cc\u06d4 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06cc\u06ba \u0633\u0627\u062e\u062a\u06cc \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646 \u06a9\u0627 \u062a\u0639\u0644\u0642 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06a9\u06d2 \u0628\u0648\u0679\u0633\u0679\u0631\u06cc\u067e \u0645\u0631\u062d\u0644\u06d2 \u0633\u06d2 \u06c1\u06d2\u060c \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0646\u06cc\u0633\u06cc \u0622\u0626\u0633 \u0628\u0631\u06af \u06a9\u06cc\u0679\u0644\u0627\u06af \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>s3:\/\/warehouse\/<\/code>. \u0622\u0626\u0633 \u0628\u0631\u06af \u0679\u06cc\u0628\u0644 \u0688\u06cc\u0679\u0627 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u0633\u06d2 \u0627\u062e\u0630 \u06a9\u0631\u062f\u06c1 \u0631\u0627\u0633\u062a\u0648\u06ba \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u0648\u0627\u0642\u0639 \u06c1\u06d2\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631: <code>s3:\/\/warehouse\/default\/<\/code> \u06a9\u06d2 \u0644\u06cc\u06d2 <code>default<\/code> \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06d4<\/p>\n<h4 id=\"heading-s3-credential-configuration-issue\">S3 \u0633\u0646\u062f\u06cc \u062a\u0631\u062a\u06cc\u0628 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644<\/h4>\n<p>Nessie \u06a9\u06cc S3 \u0633\u0646\u062f\u06cc \u0641\u06cc\u0644\u0688 \u0633\u0627\u062f\u06c1 \u062a\u0627\u0631\u0648\u06ba \u06a9\u0648 \u0642\u0628\u0648\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06d2 (\u0645\u0645\u06a9\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0633\u06cc\u06a9\u0648\u0631\u0679\u06cc \u0648\u062c\u0648\u06c1\u0627\u062a \u06a9\u06cc \u0628\u0646\u0627\u0621 \u067e\u0631)\u06d4 \u0622\u067e \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0641\u0627\u0631\u0645\u06cc\u0679 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062e\u0641\u06cc\u06c1 URI \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4 <code>urn:nessie-secret:quarkus:<name\/><\/code> \u0645\u0642\u0627\u0645\u06cc \u0627\u0633\u0646\u0627\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06be\u06cc \u06cc\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0632\u06cc\u062f \u0628\u0631\u0622\u06ba\u060c SCREAMING_SNAKE_CASE \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a \u06a9\u06d2 \u0645\u062a\u063a\u06cc\u0631 \u0627\u0635\u0648\u0644 Quarkus \u067e\u0631\u0627\u067e\u0631\u0679\u06cc \u06a9\u06d2 \u0646\u0627\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0628\u06c1\u0645 \u06c1\u06cc\u06ba \u062c\u0646 \u0645\u06cc\u06ba \u06c1\u0627\u0626\u0641\u0646\u0632 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u067e\u0631\u0627\u067e\u0631\u0679\u06cc \u06a9\u0648 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0648\u06cc\u0644\u06cc\u0648 (\u0646\u0627\u06a9\u0627\u0645\u06cc) \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0688\u0627\u0679 \u0646\u0648\u0679\u06cc\u0634\u0646 \u06a9\u06cc\u0632 \u06a9\u0648 \u06a9\u0645\u067e\u0648\u0632 \u0627\u0646\u0648\u0627\u0626\u0631\u0645\u0646\u0679 \u0628\u0644\u0627\u06a9 \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u067e\u0627\u0633 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633\u06d2 Quarkus \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06d2 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-properties\">nessie.catalog.service.s3.default-options.access-key: \"urn:nessie-secret:quarkus:nessie.catalog.secrets.access-key\"\nnessie.catalog.secrets.access-key.name: rustfsadmin\nnessie.catalog.secrets.access-key.secret: rustfsadmin\n<\/code><\/pre>\n<h4 id=\"heading-nessie-health-check\">\u0686\u0627\u0631 \u0628\u062c\u06d2 \u06c1\u06cc\u0644\u062a\u06be \u0686\u06cc\u06a9 \u0627\u067e<\/h4>\n<p>RustFS \u0633\u06cc\u0679\u0646\u06af\u0632 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c Nessie&#8217;s health check URL (http:\/\/localhost:9090\/q\/health) \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062c\u0648\u0627\u0628 \u0648\u0627\u067e\u0633 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2:<\/p>\n<pre><code class=\"language-json\">{\n    \"status\": \"UP\",\n    \"checks\": [\n        {\n            \"name\": \"MongoDB connection health check\",\n            \"status\": \"UP\"\n        },\n        {\n            \"name\": \"Warehouses Object Stores\",\n            \"status\": \"UP\",\n            \"data\": {\n                \"warehouse.warehouse.status\": \"UP\"\n            }\n        },\n        {\n            \"name\": \"Database connections health check\",\n            \"status\": \"UP\",\n            \"data\": {\n                \"<default>\": \"UP\"\n            }\n        }\n    ]\n}\n<\/default><\/code><\/pre>\n<p>\u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u06cc\u06c1 \u0627\u0633\u0679\u06cc\u06a9 MongoDB \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2 \u062a\u0648\u060c MongoDB \u06a9\u0646\u06a9\u0634\u0646 \u0627\u0633\u0679\u06cc\u0679\u0633 \u0686\u06cc\u06a9 \u062c\u0648\u0627\u0628 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u0627\u06d4 Quarkus \u0628\u0644\u0679 \u0627\u0646 \u067e\u0631\u0648\u0628\u0633 \u062c\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u06cc \u0642\u0633\u0645 \u0633\u06d2 \u0642\u0637\u0639 \u0646\u0638\u0631 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0631\u062c\u0633\u0679\u0631\u0688 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 JDBC \u06a9\u06d2 \u06a9\u0646\u0641\u06cc\u06af\u0631 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c MongoDB \u0645\u0646\u0633\u0644\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 UP \u0631\u067e\u0648\u0631\u0679 \u0635\u0631\u0641 \u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u06a9\u0627 \u062c\u0648\u0627\u0628 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-catalog-endpoint-vs-management\">\u06a9\u06cc\u0679\u0644\u0627\u06af \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u0627\u0648\u0631 \u0627\u0646\u062a\u0638\u0627\u0645<\/h4>\n<p>\u0646\u06cc\u0633\u06cc \u0646\u06d2 \u062f\u0648 \u0627\u0644\u06af \u0627\u0644\u06af APIs \u06a9\u0648 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06a9\u06cc\u0627\u06d4 Iceberg REST \u06a9\u06cc\u0679\u0644\u0627\u06af \u06cc\u06c1\u0627\u06ba \u0648\u0627\u0642\u0639 \u06c1\u06d2: <code>\/iceberg<\/code>. \u06cc\u06c1 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 \u0627\u0633\u067e\u0627\u0631\u06a9 \u0627\u0648\u0631 \u0679\u0631\u06cc\u0646\u0648 \u0633\u06d2 \u062c\u0691\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 Nessie Management API \u06cc\u06c1\u0627\u06ba \u0648\u0627\u0642\u0639 \u06c1\u06d2: <code>\/api\/v2<\/code>\u06cc\u06c1 \u0628\u0631\u0627\u0646\u0686 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632\u060c \u06a9\u0645\u0679 \u06c1\u0633\u0679\u0631\u06cc\u060c \u0627\u0648\u0631 \u0679\u06cc\u0628\u0644 \u0627\u0646\u0633\u067e\u06cc\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06d2\u06d4 \u0648\u06c1 \u0642\u0627\u0628\u0644 \u062a\u0628\u0627\u062f\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-properties\"># Iceberg REST API\nhttp:\/\/localhost:19120\/iceberg\/v1\/main\/namespaces\nhttp:\/\/localhost:19120\/iceberg\/v1\/config\n\n# Nessie management API\nhttp:\/\/localhost:19120\/api\/v2\/config\n<\/code><\/pre>\n<h4 id=\"heading-notes\">\u062d\u0648\u0627\u0644\u06c1:<\/h4>\n<ul>\n<li>\n<p><code>path-style-access: true<\/code>    \u063a\u06cc\u0631 AWS S3 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4 <code>region<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0688\u0645\u06cc \u0642\u062f\u0631 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0637\u0648\u0631 \u067e\u0631 AWS SDK \u06a9\u0648 \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0631\u0633\u0679 \u0627\u06cc\u0641 \u0627\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u0633\u06d2 \u0628\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u06cc\u0633\u06cc \u06a9\u06cc \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0628\u0646\u062f\u0631\u06af\u0627\u06c1 9000 \u06a9\u0648 \u0645\u06cc\u0632\u0628\u0627\u0646 \u067e\u0631 9090 \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0645\u06cc\u06ba 9000 \u0627\u0648\u0631 9001 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"heading-forward-path\">\u062a\u0631\u0633\u06cc\u0644 \u06a9\u0627 \u0631\u0627\u0633\u062a\u06c1<\/h4>\n<p>\u0686\u0648\u0646\u06a9\u06c1 Nessie \u0627\u06cc\u06a9 \u0633\u0679\u06cc\u0679 \u0644\u06cc\u0633 REST \u0633\u0631\u0648\u0633 \u06c1\u06d2\u060c \u06cc\u06c1 \u0627\u0646\u0679\u0631 \u0646\u0648\u0688 \u06a9\u0648\u0622\u0631\u0688\u06cc\u0646\u06cc\u0634\u0646 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0631\u06cc\u0688 \u0627\u0633\u06a9\u06cc\u0644\u0646\u06af \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 LB \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633\u062a\u062d\u06a9\u0627\u0645 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-spark\">\u0634\u0639\u0644\u06c1<\/h3>\n<p>Apache Spark\u060c \u0627\u06cc\u06a9 \u062a\u0642\u0633\u06cc\u0645 \u0634\u062f\u06c1 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0646\u06af \u0627\u0646\u062c\u0646\u060c \u0637\u0648\u06cc\u0644 \u0639\u0631\u0635\u06d2 \u0633\u06d2 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0627\u0648\u0631 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0627\u0646\u062a\u062e\u0627\u0628 \u06c1\u06d2\u06d4 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0633\u06cc\u0679 \u0627\u067e \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062c\u0645\u0639 \u06a9\u0631\u0627\u0626\u06cc \u06af\u0626\u06cc PySpark \u062c\u0627\u0628\u0632 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u060c Nessie REST \u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 Iceberg \u0679\u06cc\u0628\u0644 \u067e\u0691\u06be\u062a\u0627 \u0627\u0648\u0631 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 S3FileIO \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0688\u06cc\u0679\u0627 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a RustFS \u067e\u0631 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u0686\u0646\u06af\u0627\u0631\u06cc \u0627\u0633\u0679\u06cc\u0646\u0688 \u0627\u0633\u0679\u0648\u0646 \u0645\u0648\u0688 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06c1\u06cc \u0645\u0627\u0633\u0679\u0631 \u0627\u0648\u0631 \u0648\u0631\u06a9\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0644\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2: <code>spark-defaults.conf<\/code>.<\/p>\n<p>\u062f\u0648 JAR \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062c\u06af\u06c1\u0648\u06ba \u067e\u0631 \u0631\u06a9\u06be\u06d2 \u062c\u0627\u0626\u06cc\u06ba: <code>data\/spark\/jars\/<\/code> \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2:<\/p>\n<ul>\n<li>\n<p><code>iceberg-spark-runtime-3.5_2.12<\/code>: \u0627\u0633\u067e\u0627\u0631\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u0626\u0633 \u0628\u0631\u06af \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646: SparkCatalog\u060c DataFrameWriterV2\u060c SQL \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632\u060c \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u0679\u06cc\u0628\u0644\u0648\u0644\u0631 \u0645\u0646\u0637\u0642\u06d4<\/p>\n<\/li>\n<li>\n<p><code>iceberg-aws-bundle<\/code>: AWS SDK v2 \u0627\u0648\u0631 Iceberg \u0633\u06d2 S3FileIO \u0688\u06cc\u0679\u0627 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 RustFS \u067e\u0631 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0679\u0631\u0627\u0646\u0633\u067e\u0648\u0631\u0679 \u0644\u06cc\u0626\u0631 \u06c1\u06d2\u06d4 \u0627\u0633\u067e\u0627\u0631\u06a9 \u0628\u06cc\u0633 \u0627\u0645\u06cc\u062c \u0635\u0631\u0641 Hadoop AWS (SDK v1) \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0628\u0646\u0688\u0644 S3FileIO \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 SDK v2 \u06a9\u0644\u0627\u0633\u0632 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>Spark \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 Dockerfile \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 Python 3.12 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd spark\ndocker compose build\ndocker compose up -d\n<\/code><\/pre>\n<p>PySpark \u062c\u0627\u0628\u0632 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u060c \u062c\u06c1\u0627\u06ba \u06c1\u0645 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u062d\u0635\u06d2 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06c1\u0631 DAG \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 Spark \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633\u067e\u0627\u0631\u06a9 \u062c\u0627\u0628 \u062c\u0645\u0639 \u06a9\u0631\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062c\u0648 \u0622\u0626\u0633 \u0628\u0631\u06af \u0679\u06cc\u0628\u0644 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0646\u06cc\u0633\u06cc \u0645\u06cc\u06ba \u0679\u0627\u0631\u06af\u0679 \u0646\u06cc\u0645 \u0627\u0633\u067e\u06cc\u0633 \u06a9\u0627 \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 Nessie\u060c Hive Metastore \u06a9\u06d2 \u0628\u0631\u0639\u06a9\u0633\u060c \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 RustFS \u067e\u0631 \u0688\u06cc\u0679\u0627 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0644\u06a9\u06be\u06d2 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06af\u0645\u0634\u062f\u06c1 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u067e\u0631 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06cc\u060c \u0627\u0648\u0631 \u06cc\u062a\u06cc\u0645 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0628\u063a\u06cc\u0631 \u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u06d2 \u0627\u0646\u062f\u0631\u0627\u062c\u0627\u062a \u06a9\u06d2 \u0631\u06c1 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06cc\u06d4<\/p>\n<p>\u0646\u0633\u0644 <code>default<\/code> \u0627\u067e\u0646\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># Nessie should be up and running at this point\ncurl -X POST http:\/\/localhost:19120\/iceberg\/v1\/main\/namespaces \n  -H \"Content-Type: application\/json\" \n  -d '{\"namespace\": [\"default\"]}'\n{\n  \"namespace\" : [ \"default\" ],\n  \"properties\" : { }\n}\n<\/code><\/pre>\n<p>\u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">curl http:\/\/localhost:19120\/iceberg\/v1\/main\/namespaces\n<\/code><\/pre>\n<h4 id=\"heading-catalog-mismatch-tables-missing-across-query-engines\">\u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u06cc \u0645\u0645\u0627\u062b\u0644\u062a: \u067e\u0648\u0631\u06d2 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u06d2 \u0627\u0646\u062c\u0646 \u0645\u06cc\u06ba \u0679\u06cc\u0628\u0644 \u063a\u0627\u0626\u0628 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0627\u06af\u0631 \u0627\u0633\u067e\u0627\u0631\u06a9 \u0645\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u0679\u06cc\u0628\u0644 Trino \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0645\u0645\u06a9\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u06cc \u0645\u0645\u0627\u062b\u0644\u062a \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06c1\u06d2\u06d4 \u0686\u0646\u06af\u0627\u0631\u06cc \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2: <code>NessieCatalog<\/code> Iceberg REST \u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 Trino \u0627\u0648\u0631 Trino \u0627\u0644\u06af \u0627\u0644\u06af \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0646\u0638\u0627\u0631\u06d2 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0679\u06cc\u0628\u0644 \u06a9\u06cc \u062d\u0627\u0644\u062a \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0627\u0646\u062c\u0646\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u06cc\u0679\u0644\u0627\u06af \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>http:\/\/nessie:19120\/iceberg<\/code>.<\/p>\n<h4 id=\"heading-notes\">\u062d\u0648\u0627\u0644\u06c1:<\/h4>\n<ul>\n<li>\n<p><strong>\u06a9\u0627\u0631\u06a9\u0646 \u06a9\u06cc \u06cc\u0627\u062f\u062f\u0627\u0634\u062a:<\/strong> \u06a9\u0627\u0631\u06a9\u0646 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2: <code>SPARK_WORKER_MEMORY: 8g<\/code>. Spark \u06a9\u0627 \u0688\u06cc\u0641\u0627\u0644\u0679 1g \u06c1\u06d2\u060c \u062c\u0648 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0642\u0637\u0627\u0631 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0627\u0645 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u062f\u0633\u062a\u06cc\u0627\u0628 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u0627\u0633\u06d2 \u0627\u06cc\u0688\u062c\u0633\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0631\u06cc\u0645\u0648\u0679 \u062f\u0633\u062a\u062e\u0637:<\/strong> <code>remote-signing-enabled: false<\/code>    Nessie \u06a9\u0627 REST \u06a9\u06cc\u0679\u0644\u0627\u06af IAM\/STS \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0633\u0646\u0627\u062f \u0641\u0631\u0648\u062e\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062d\u0645\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u0645\u06cc\u06ba \u06cc\u06c1 \u0627\u0646\u0636\u0645\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u0648 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0631\u06cc\u0645\u0648\u0679 \u0633\u0627\u0626\u0646\u0646\u06af \u06a9\u0648 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0645\u06a9\u0645\u0644 \u0631\u06cc \u0627\u0633\u0679\u0627\u0631\u0679 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/strong> \u062c\u0628 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0688\u0648\u06a9\u0631 \u0641\u0627\u0626\u0644 \u0644\u06cc\u0648\u0644 \u0628\u0627\u0626\u0646\u0688\u0646\u06af \u06a9\u06cc\u0634\u06d2 \u0627\u0646\u0648\u0688\u0632 \u06a9\u0648 \u0645\u0627\u0624\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u06cc\u06ba <code>spark-defaults.conf<\/code> \u0627\u0633 \u06a9\u0627 \u0627\u062b\u0631 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627 \u062c\u0628 \u062a\u06a9 \u0627\u0633\u067e\u0627\u0631\u06a9 \u0627\u0648\u0631 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0648\u0631\u06a9\u0631\u0632 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062c\u0627\u062a\u06d2\u06d4 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0645\u0648\u0688 \u0645\u06cc\u06ba\u060c \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0648\u0631\u06a9\u0631\u0632 \u0627\u0633\u067e\u0627\u0631\u06a9 \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 \u06c1\u06cc\u06ba (\u0648\u06c1 \u0639\u0645\u0644 \u062c\u0648 \u062c\u0627\u0628 \u062c\u0645\u0639 \u06a9\u0631\u0648\u0627\u062a\u06d2 \u0648\u0642\u062a \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u067e\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba) \u0627\u0648\u0631 \u0627\u0633 \u0644\u06cc\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>Jupyter \u0646\u0648\u0679 \u0628\u06a9:<\/strong> PySpark \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 Jupyter \u0645\u062b\u0627\u0644 \u0622\u0626\u0633 \u0628\u0631\u06af \u0679\u06cc\u0628\u0644\u0632 \u06a9\u06d2 \u062e\u0644\u0627\u0641 \u0627\u06cc\u0688\u06c1\u0627\u06a9 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06d2 \u0627\u0633\u0679\u06cc\u06a9 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06d2\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u0622\u067e \u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u0633\u067e\u0627\u0631\u06a9 \u06a9\u0644\u0633\u0679\u0631 \u0627\u0648\u0631 \u0646\u06cc\u0633\u06cc \u06a9\u06cc\u0679\u0644\u0627\u06af \u0633\u06d2 \u062c\u0691\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u06cc\u06ba\u060c \u0622\u067e \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0679\u06cc\u0628\u0644 \u0633\u06d2 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p> <strong>\u0627\u0646\u062a\u0628\u0627\u06c1:<\/strong> \u0627\u0633\u067e\u0627\u0631\u06a9 \u0648\u0631\u06a9\u0631\u0632 \u0627\u0648\u0631 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0648\u0631\u06a9\u0631\u0632 (\u0688\u0631\u0627\u0626\u06cc\u0648\u0631) \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc Python \u0645\u0627\u0626\u0646\u0631 \u0648\u0631\u0698\u0646 \u0686\u0644\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 PySpark \u0627\u0633\u06d2 \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u0631 \u0646\u0627\u0641\u0630 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06af\u0631 \u06a9\u0627\u0646\u0679\u0627 \u0644\u06af \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0641\u0648\u0631\u0627\u064b \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u067e\u0627\u0631\u06a9 \u0627\u0645\u06cc\u062c Python 3.12 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 Dockerfile \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0648 Airflow \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u062f\u0648\u0646\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0633\u06cc \u0627\u06cc\u06a9 \u06a9\u0648 \u0627\u067e \u06af\u0631\u06cc\u0688 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0648\u0631\u0698\u0646 \u0633\u06cc\u062f\u06be \u0645\u06cc\u06ba \u0631\u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-apache-airflow\">\u0627\u067e\u0627\u0686\u06cc \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648<\/h3>\n<p>\u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u06c1\u0627\u0624 \u06a9\u0648 \u062a\u062e\u0644\u06cc\u0642\u060c \u0634\u06cc\u0688\u0648\u0644\u060c \u0627\u0648\u0631 \u0645\u0627\u0646\u06cc\u0679\u0631 \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba\u060c \u06cc\u06c1 \u0628\u06cc\u0686 \u067e\u0631\u0648\u0633\u06cc\u0633\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062f\u062e\u0627\u0644 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633\u0679\u0631\u06cc\u0645 \u067e\u0631\u0648\u0633\u06cc\u0633\u0646\u06af \u062c\u06cc\u0633\u06d2 \u0645\u0639\u0627\u0645\u0644\u0627\u062a \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0691\u06be\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0633\u0631\u06a9\u0627\u0631\u06cc \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u0633\u06d2 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u06a9\u06d2 \u0627\u062c\u0632\u0627\u0621 \u0688\u06cc \u0627\u06d2 \u062c\u06cc \u067e\u0631\u0648\u0633\u06cc\u0633\u0631 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u0644\u062a\u06d2 \u062c\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/04\/1776580601_614_\u0628\u0644\u06a9-\u0627\u062f\u062e\u0627\u0644-\u06a9\u06d2-\u0644\u06cc\u06d2-\u0627\u0648\u067e\u0646-\u0633\u0648\u0631\u0633-\u0688\u06cc\u0679\u0627-\u0644\u06cc\u06a9-\u06a9\u06cc\u0633\u06d2-\u0628\u0646\u0627\u06cc\u0627.png\" alt=\"\u0688\u06cc \u0627\u06d2 \u062c\u06cc \u067e\u0631\u0648\u0633\u06cc\u0633\u0631 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u06c1\u0645 \u067e\u06c1\u0644\u0648:<\/p>\n<ul>\n<li>\n<p>\u0688\u06cc \u0627\u06d2 \u062c\u06cc \u067e\u0631\u0648\u0633\u06cc\u0633\u0631 \u0645\u0633\u0644\u0633\u0644 \u0688\u06cc \u0627\u06d2 \u062c\u06cc \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u067e\u0627\u0631\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0633\u06cc\u0631\u06cc\u0644\u0627\u0626\u0632 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0634\u06cc\u0688\u06cc\u0648\u0644\u0631 \u06cc\u06c1\u0627\u06ba \u0633\u06d2 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0688\u06cc \u0627\u06d2 \u062c\u06cc \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06cc \u0622\u062e\u0631\u06cc \u062a\u0627\u0631\u06cc\u062e \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u0679\u0627\u0633\u06a9 \u0645\u062b\u0627\u0644 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0631\u06cc\u0688\u06cc\u0633 \u0642\u0637\u0627\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 CeleryExecutor \u06a9\u06cc \u0637\u0631\u0641 \u062f\u06be\u06a9\u06cc\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u062c\u0648\u0627\u0626\u0646 \u06a9\u06d2 \u06a9\u0627\u0631\u06a9\u0646\u0627\u0646 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u0627\u0648\u0631 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>SparkSubmitOperator<\/code>\u06a9\u0627\u0631\u06a9\u0646 \u0639\u0645\u0644 \u0627\u0633\u067e\u0627\u0631\u06a9 \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 \u0628\u0646 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u067e\u0627\u0631\u06a9 \u06a9\u0644\u0633\u0679\u0631 \u0645\u06cc\u06ba \u0645\u0644\u0627\u0632\u0645\u062a\u06cc\u06ba \u062c\u0645\u0639 \u06a9\u0631\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631 \u0627\u0633\u067e\u0627\u0631\u06a9 \u0648\u0631\u06a9\u0631\u0632 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u067e\u0627\u0631\u06a9\u06cc\u0679 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a RustFS \u06a9\u0648 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 Nessie \u06a9\u0648 \u0679\u06cc\u0628\u0644 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0622\u067e\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0648\u0627\u067e\u0633 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 DB \u067e\u0631 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u062c\u0627\u0648\u0627 17 \u0627\u0648\u0631 \u0627\u0636\u0627\u0641\u06cc \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0688\u0627\u06a9\u0631 \u0641\u0627\u0626\u0644 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062a\u0635\u0648\u06cc\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd airflow-docker\ndocker compose build\ndocker compose up -d\n<\/code><\/pre>\n<h4 id=\"heading-pipelines\">\u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646<\/h4>\n<p>\u06c1\u0645\u06cc\u06ba \u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u06cc\u06a9 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <code>airflow-docker\/dags<\/code> \u06cc\u06c1 \u0688\u06cc \u0627\u06d2 \u062c\u06cc \u067e\u0631\u0648\u0633\u06cc\u0633\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0688\u06cc \u0627\u06d2 \u062c\u06cc \u06a9\u0648 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0688\u06cc \u0628\u06cc \u0645\u06cc\u06ba \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0641\u0648\u0644\u0688\u0631 \u06c1\u06d2\u06d4 \u0645\u062e\u062a\u0644\u0641 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u06a9\u06cc \u0686\u0627\u0631 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u062b\u0627\u0644\u06cc\u06ba \u0641\u0631\u0627\u06c1\u0645 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p><code>step1_hello_dag.py<\/code>: \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f \u0679\u0627\u0633\u06a9 DAG \u062c\u0633 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0627\u0646\u062d\u0635\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 Python \u0641\u0646\u06a9\u0634\u0646 \u062c\u0648 \u067e\u06cc\u063a\u0627\u0645 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>step2_spark_submit.py<\/code>: SparkSubmitOperator \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 PySpark \u062c\u0627\u0628 \u062c\u0645\u0639 \u06a9\u0631\u0648\u0627\u0626\u06cc\u06ba\u06d4 \u06cc\u06c1 \u062c\u0627\u0628 \u0646\u06cc\u0633\u06cc \u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06cc\u06a9 \u0622\u0626\u0633 \u0628\u0631\u06af \u0679\u06cc\u0628\u0644 \u067e\u0631 \u0627\u06cc\u06a9 \u062c\u0627\u0645\u062f \u0688\u06cc\u0679\u0627 \u0633\u06cc\u0679 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>step3_spark_partitioned.py<\/code>: \u0648\u0642\u062a \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0631\u062d\u0644\u06c1 2 \u06a9\u0648 \u0628\u0691\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u062e\u0635\u0648\u0635 \u0633\u0644\u0627\u0679 \u0679\u0627\u0626\u0645 PySpark \u0627\u0633\u06a9\u0631\u067e\u0679 \u0645\u06cc\u06ba \u06af\u0632\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\u0648\u0642\u062a \u067e\u0631 \u0645\u0628\u0646\u06cc \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc \u0642\u062f\u0631\u06cc\u06ba \u0627\u0633 \u0633\u06d2 \u0627\u062e\u0630 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba: <code>data_interval_start<\/code> \u06a9\u0645\u0632\u0648\u0631\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 (\u0628\u06cc\u06a9 \u0641\u0644\u060c \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0626\u06cc\u06ba)\u06d4<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><code>scraper_pipeline<\/code>: \u0627\u0635\u0644 \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u06d4 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0679\u0627\u0633\u06a9 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0679\u0631\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0648\u0622\u0631\u0688\u06cc\u0646\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 <code>scrapworker<\/code> \u0631\u06cc\u0688\u06cc\u0633 \u0642\u0637\u0627\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 <code>scrapredis<\/code>.<\/p>\n<ul>\n<li>\u062f\u0648\u0646\u0648\u06ba <code>scrapredis<\/code> \u0627\u0648\u0631 <code>scrapworker<\/code> \u0627\u0633 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0644\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h4 id=\"heading-deploy-mode-and-driver-config\">\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u0648\u0688 \u0627\u0648\u0631 \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628<\/h4>\n<p>\u0622\u063a\u0627\u0632 <code>SparkSubmitOperator<\/code> \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u06af\u0626\u06cc\u06d4 <code>deploy_mode=\"cluster\"<\/code>\u0688\u0631\u0627\u0626\u06cc\u0648\u0631 \u06a9\u0648 \u0627\u0633\u067e\u0627\u0631\u06a9 \u06a9\u0644\u0633\u0679\u0631 \u067e\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\u060c \u062c\u0645\u0639 \u06a9\u0631\u0627\u0646\u06d2 \u06a9\u06d2 \u0646\u0638\u0627\u0645 \u067e\u0631 \u0646\u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0633\u062e\u062a \u062e\u0631\u0627\u0628\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633\u067e\u0627\u0631\u06a9 \u0627\u0633\u0679\u06cc\u0646\u0688 \u0627\u0644\u0648\u0646 \u06a9\u0644\u0633\u0679\u0631\u0632 \u067e\u0631 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Cluster deploy mode is currently not supported for python applications on standalone clusters.\n<\/code><\/pre>\n<p>Python \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0644\u0633\u0679\u0631 \u0648\u0636\u0639 \u0635\u0631\u0641 YARN \u0627\u0648\u0631 Kubernetes \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06d2\u06d4 \u06cc\u06c1\u0627\u06ba \u0627\u0635\u0644\u0627\u062d\u0627\u062a \u06c1\u06cc\u06ba: <code>deploy_mode=\"client\"<\/code>\u0644\u06cc\u06a9\u0646 \u0627\u0633 \u0633\u06d2 \u0645\u0633\u0626\u0644\u06c1 \u0628\u062f\u0644 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0645\u0648\u0688 \u0645\u06cc\u06ba\u060c \u0688\u0631\u0627\u0626\u06cc\u0648\u0631 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0648\u0631\u06a9\u0631 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0645\u06cc\u06ba \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0627\u0631\u06a9\u0646\u0648\u06ba \u06a9\u0648 \u06c1\u0631 \u0627\u0633 \u0686\u06cc\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u062c\u0648 \u0627\u0633\u067e\u0627\u0631\u06a9 \u06a9\u0646\u0679\u06cc\u0646\u0631 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u062c\u0645\u0648\u0639\u06cc \u0637\u0648\u0631 \u067e\u0631\u060c \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u06a9\u0627\u0631\u06a9\u0646 \u06a9\u0648 \u062a\u06cc\u0646 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p>\u06cc\u06c1\u0627\u06ba \u0622\u0626\u0633 \u0628\u0631\u06af \u0627\u0648\u0631 \u0646\u06cc\u0633\u06cc \u062c\u0627\u0631 \u06c1\u06cc\u06ba: <code>\/opt\/spark\/user-jars\/<\/code><\/p>\n<\/li>\n<li>\n<p><code>spark-defaults.conf<\/code>    \u06a9\u06cc\u0679\u0644\u0627\u06af\u060c \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u060c \u0627\u0648\u0631 JAR \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><code>SPARK_CONF_DIR=\/opt\/spark\/conf<\/code>\u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0622\u067e \u067e\u0627\u0626\u067e \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0646\u0635\u0628 PySpark \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>spark-submit<\/code> \u06cc\u06c1 \u062e\u0648\u062f \u06a9\u0627\u0631 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0646\u0635\u0628 conf \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u06a9\u06cc\u0679\u0644\u0627\u06af \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628 \u06a9\u06d2 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0637\u06d2 \u06cc\u06c1 \u062a\u06be\u0627 \u06a9\u06c1 \u062a\u06cc\u0646\u0648\u06ba \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 <code>x-airflow-common<\/code> \u06a9\u0648 <code>airflow-docker\/docker-compose.yaml<\/code> \u0644\u06c1\u0630\u0627\u060c \u062a\u0645\u0627\u0645 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u062e\u062f\u0645\u0627\u062a \u0627\u0633\u06d2 \u0648\u0631\u0627\u062b\u062a \u0645\u06cc\u06ba \u0645\u0644\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-yaml\">environment:\n  SPARK_CONF_DIR: \/opt\/spark\/conf\n\nvolumes:\n  - ..\/data\/spark\/jars:\/opt\/spark\/user-jars:ro\n  - ..\/spark\/spark-defaults.conf:\/opt\/spark\/conf\/spark-defaults.conf:ro\n<\/code><\/pre>\n<h4 id=\"heading-partition-values-written-as-null\">\u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc \u0642\u062f\u0631 NULL \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0644\u06a9\u06be\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4<\/h4>\n<p>\u062c\u0628 \u062a\u06cc\u0633\u0631\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 (\u0627\u0633\u067e\u0627\u0631\u06a9 \u067e\u0627\u0631\u0679\u06cc\u0634\u0646\u0688) \u06a9\u0648 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0686\u0644\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u0648\u060c \u0688\u06cc\u0679\u0627 \u0631\u0633\u0679 \u0627\u06cc\u0641 \u0627\u06cc\u0633 \u0645\u06cc\u06ba \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u067e\u06c1\u0646\u0686\u0627\u060c \u0644\u06cc\u06a9\u0646 \u0622\u0626\u0633 \u0628\u0631\u06af \u067e\u0627\u0631\u0679\u06cc\u0634\u0646 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0633\u06d2 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0646\u062a\u0627\u0626\u062c \u0628\u0631\u0622\u0645\u062f \u06c1\u0648\u0626\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">+------------------+----------+\n|         partition|file_count|\n+------------------+----------+\n|{NULL, NULL, NULL}|         2|\n+------------------+----------+\n<\/code><\/pre>\n<p>\u0627\u0635\u0644 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0645\u06cc\u06ba Spark&#8217;s DataSource V1 API \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<pre><code class=\"language-python\">df.write.format(\"iceberg\").mode(\"overwrite\").saveAsTable(table)\n<\/code><\/pre>\n<p>\u0627\u0633\u06a9\u0631\u067e\u0679 \u0645\u06cc\u06ba \u0627\u0633\u067e\u0627\u0631\u06a9 \u06a9\u06d2 V1 \u0688\u06cc\u0679\u0627 \u0641\u0631\u06cc\u0645 \u0631\u0627\u0626\u0679 API \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u0627\u0644\u06af \u062a\u06be\u0644\u06af \u062c\u062f\u0648\u0644 \u06a9\u06d2 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0648 \u0644\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0641\u0627\u0631\u0645\u06cc\u0679 (&quot;\u0622\u0626\u0633 \u0628\u0631\u06af&#8221;) \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0622\u0626\u0633 \u0628\u0631\u06af \u06a9\u06d2 \u06a9\u06cc\u0679\u0644\u0627\u06af \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0631\u0627\u0633\u062a\u06d2 \u06a9\u0648 \u0646\u0638\u0631\u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u062a\u06cc\u062c\u06d2 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0622\u0626\u0633 \u0628\u0631\u06af \u0646\u06d2 \u0688\u06cc\u0679\u0627 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0639\u06c1\u062f \u06a9\u06cc\u0627 \u0644\u06cc\u06a9\u0646 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0645\u06cc\u06ba NULL \u067e\u0627\u0631\u0679\u06cc\u0634\u0646 \u0648\u06cc\u0644\u06cc\u0648 \u0644\u06a9\u06be\u0627\u06d4<\/p>\n<p>\u062d\u0644 \u0622\u0626\u0633 \u0628\u0631\u06af \u06a9\u06d2 \u0645\u0642\u0627\u0645\u06cc DataFrameWriterV2 API \u0645\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-python\">df.writeTo(table).overwritePartitions()\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0622\u0626\u0633 \u0628\u0631\u06af \u06a9\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u062a\u062d\u0631\u06cc\u0631\u06cc \u0631\u0627\u0633\u062a\u06d2 \u0633\u06d2 \u06af\u0632\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0635\u0644 \u06a9\u0627\u0644\u0645 \u0627\u0642\u062f\u0627\u0631 (ds, hr, min) \u067e\u0631 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0645\u06cc\u06ba \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>overwritePartitions()<\/code> \u0688\u06cc\u0679\u0627 \u0641\u0631\u06cc\u0645 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u067e\u0627\u0631\u0679\u06cc\u0634\u0646\u0632 \u06a9\u0648 \u0627\u0648\u0648\u0631 \u0631\u0627\u0626\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633\u06cc \u0645\u0642\u0631\u0631\u06c1 \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u0648\u06c1\u06cc \u0642\u062f\u0631\u06cc\u06ba \u067e\u06cc\u062f\u0627 \u06c1\u0648\u06ba \u06af\u06cc \u0627\u0648\u0631 \u062c\u0648\u06c1\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633 \u067e\u0627\u0631\u0679\u06cc\u0634\u0646 \u06a9\u0648 \u0628\u062f\u0644 \u062f\u06cc\u06ba \u06af\u06d2\u060c \u0628\u0627\u0642\u06cc \u062a\u0645\u0627\u0645 \u067e\u0627\u0631\u0679\u06cc\u0634\u0646\u0632 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06c1\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p> \u0645\u0648\u062c\u0648\u062f\u06c1 NULL \u067e\u0627\u0631\u0679\u06cc\u0634\u0646 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0627\u0646\u062f\u0631\u0627\u062c\u0627\u062a \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0622\u0646\u06d2 \u0648\u0627\u0644\u06cc V2 \u062a\u062d\u0631\u06cc\u0631\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0633\u0627\u0628\u0642\u06c1 \u200b\u200b\u0637\u0648\u0631 \u067e\u0631 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0646\u0626\u06cc \u062c\u062f\u0648\u0644\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0646 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u062e\u0631\u0627\u0628 \u0688\u06cc\u0679\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c DROP TABLE \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u06a9\u06be\u0646\u0627 \u0622\u0633\u0627\u0646 \u062a\u0631\u06cc\u0646 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-scrapredis\">\u0633\u06a9\u0631\u06cc\u067e \u0644\u06cc\u0688\u06cc\u0632<\/h3>\n<p>Scrapredis \u0627\u06cc\u06a9 \u0648\u0642\u0641 \u0634\u062f\u06c1 Redis \u0645\u062b\u0627\u0644 \u06c1\u06d2 \u062c\u0648 Airflow \u0627\u0648\u0631 Scrapworker \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u06a9\u0627\u0645 \u06a9\u06cc \u0642\u0637\u0627\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0628\u06cc\u0679\u06be\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 Airflow \u06a9\u06d2 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc Redis \u0633\u06d2 \u0627\u0644\u06af \u06c1\u06d2\u060c \u062c\u0648 \u0635\u0631\u0641 CeleryExecutor \u06a9\u06d2 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0628\u06be\u06cc\u062c\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u0688\u06cc\u06a9\u067e\u0644\u0646\u06af \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u06a9\u06d2 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u062d\u0635\u0648\u06ba \u06a9\u0648 \u0686\u06be\u0648\u0626\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0631\u0627\u0644\u0631 \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc \u0642\u0637\u0627\u0631 \u06a9\u0648 \u0645\u0646\u0638\u0645\u060c \u067e\u06cc\u0645\u0627\u0646\u06d2 \u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u06cc\u0679\u0631\u0646 \u0633\u06a9\u0631\u06cc\u0686\u0646\u06af \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u0639\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2. \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0628\u06cc\u0631\u0648\u0646\u06cc \u0639\u0645\u0644 \u062c\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0644\u0627\u0626\u0641 \u0633\u0627\u0626\u06cc\u06a9\u0644\u060c \u0631\u06cc\u0633\u0648\u0631\u0633 \u067e\u0631\u0648\u0641\u0627\u0626\u0644\u060c \u06cc\u0627 \u0631\u06cc\u0679 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u0633\u06cc \u0637\u0631\u062d \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u0639\u0646\u06cc\u060c \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u06a9\u0627\u0645 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u0628\u06cc\u0631\u0648\u0646\u06cc \u06a9\u0627\u0631\u06a9\u0646 \u0627\u0633\u06d2 \u067e\u0627\u067e \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0646\u062a\u0627\u0626\u062c \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u067e\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06be\u0631\u0686\u0646\u06d2 \u0648\u0627\u0644\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0631\u0627\u0624\u0646\u0688 \u0679\u0631\u067e \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06d2:<\/p>\n<ol>\n<li>\u06c1\u0648\u0627 \u06a9\u0627 \u0628\u06c1\u0627\u0624 \u0645\u0644\u0627\u0632\u0645\u062a \u06a9\u06d2 \u067e\u06d2 \u0644\u0648\u0688 \u06a9\u0648 \u0627\u06cc\u06a9 \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u062f\u06be\u06a9\u06cc\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/li>\n<\/ol>\n<pre><code class=\"language-python\">QUEUE_KEY = \"scrapworker:jobs\"\nclient.lpush(QUEUE_KEY, json.dumps(payload))\n<\/code><\/pre>\n<ol>\n<li>\u0633\u06a9\u0631\u06cc\u067e \u0648\u0631\u06a9\u0631 \u0642\u0637\u0627\u0631 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06af\u0644\u06d2 \u06a9\u0627\u0645 \u06a9\u0648 \u067e\u0627\u067e \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/li>\n<\/ol>\n<pre><code class=\"language-python\">while True:\n    _, payload = client.blpop(redis_cfg[\"queue_key\"])\n<\/code><\/pre>\n<ol>\n<li>\u062c\u0628 \u06a9\u0631\u0627\u0644 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0633\u06a9\u0631\u06cc\u067e \u0648\u0631\u06a9\u0631 \u0646\u062a\u0627\u0626\u062c \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 <code>s3_path<\/code> Redis \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba:<\/li>\n<\/ol>\n<pre><code class=\"language-python\">client.set(status_key, json.dumps({\"status\": \"finished\", \"worker_id\": worker_id, \"s3_path\": job[\"s3_path\"]}), ex=TERMINAL_TTL)\n<\/code><\/pre>\n<ol>\n<li>\u06a9\u06c1 <code>wait_for_completion<\/code> \u0627\u0633 \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a \u06a9\u06cc \u06a9\u0644\u06cc\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646 \u06a9\u0648 \u067e\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648\u060c <code>publish_nessie_signal<\/code> \u0627\u0679\u06be\u0627\u0624 <code>s3_path<\/code> \u0646\u06cc\u0633\u06cc \u06a9\u0648 \u0633\u06af\u0646\u0644 \u0644\u0627\u0626\u0646 \u0644\u06a9\u06be\u06cc\u06ba\u06d4<\/li>\n<\/ol>\n<h3 id=\"heading-scrapworker\">\u0633\u06a9\u0631\u06cc\u067e \u062f\u06be\u0627\u062a\u06cc \u06a9\u0627\u0631\u06a9\u0646<\/h3>\n<p>\u0633\u06a9\u0631\u06cc\u067e \u0648\u0631\u06a9\u0631 \u0627\u06cc\u06a9 \u0627\u0632\u06af\u0631 \u0627\u06cc\u067e \u06c1\u06d2 \u062c\u0648 \u0627\u0633\u06a9\u0631\u06cc\u067e\u06cc \u06a9\u0631\u0627\u0644\u0646\u06af \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0627\u062a \u06a9\u0648 \u06a9\u0631\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0641\u06cc \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644\/\u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06cc \u0634\u0631\u062d \u0645\u062d\u062f\u0648\u062f \u0645\u0636\u0645\u0631\u0627\u062a \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u06cc\u06c1 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0633\u06d2 \u0627\u0644\u06af \u06c1\u06d2\u06d4 \u0633\u0627\u062f\u06af\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06c1\u0645 \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u0628\u06cc\u0631\u0648\u0646\u06cc \u06a9\u0627\u0631\u06a9\u0646 \u06a9\u06cc \u0642\u0633\u0645 \u0633\u0645\u062c\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0633\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0648\u0635\u0648\u0644 \u06a9\u0631\u062a\u0627 \u0627\u0648\u0631 \u0627\u0633 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c (RustFS) \u067e\u0631 \u0645\u0648\u0627\u062f \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u0627\u0648\u0631 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0630\u0645\u06c1 \u062f\u0627\u0631 \u06c1\u06d2\u06d4 Nessie \u06a9\u06cc\u0679\u0644\u0627\u06af \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u0648 \u0627\u0644\u06af \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0639\u0644\u06cc\u062d\u062f\u06c1 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u062c\u0627\u0628 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-fixed-signal-table\">\u0641\u06a9\u0633\u0688 \u0633\u06af\u0646\u0644 \u0679\u06cc\u0628\u0644<\/h4>\n<p>\u0627\u0633\u06a9\u0631\u06cc\u067e \u0634\u062f\u06c1 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0622\u0626\u0633 \u0628\u0631\u06af \u06a9\u0627\u0644\u0645\u0648\u06ba \u0645\u06cc\u06ba \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0633\u06a9\u0631\u06cc\u067e \u0648\u0631\u06a9\u0631 RastFS \u06a9\u0648 \u062e\u0627\u0645 JSON \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0646\u06cc\u0633\u06cc \u06a9\u06d2 \u0632\u06cc\u0631 \u0627\u0646\u062a\u0638\u0627\u0645 \u0622\u0626\u0633 \u0628\u0631\u06af \u0679\u06cc\u0628\u0644 \u067e\u0631 \u0627\u06cc\u06a9 \u06c1\u0644\u06a9\u06d2 \u0648\u0632\u0646 \u06a9\u06d2 \u0633\u06af\u0646\u0644 \u06a9\u06cc \u0642\u0637\u0627\u0631 \u0634\u0627\u0626\u0639 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0633\u06af\u0646\u0644\u0646\u06af \u0627\u0633\u06a9\u06cc\u0645\u0627 \u0637\u06d2 \u0634\u062f\u06c1 \u0627\u0648\u0631 \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u06c1\u06d2 (<code>run_id<\/code>\u060c <code>endpoint<\/code>\u060c <code>s3_path<\/code>\u060c <code>ds<\/code>\u060c <code>hr<\/code>\u060c <code>min<\/code>\u060c <code>published_at<\/code>)\u06d4 \u0627\u0633 \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0641\u0631\u0642 \u0646\u06c1\u06cc\u06ba \u067e\u0691\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc\u0627 \u06a9\u06be\u0631\u0686\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06cc\u06c1 \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0628\u062f\u0644\u062a\u0627\u06d4<\/p>\n<p>\u0622\u0626\u0633 \u0628\u0631\u06af \u06a9\u0627\u0644\u0645\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06a9\u0631\u06cc\u067e\u0688 \u067e\u06d2 \u0644\u0648\u0688\u0632 \u06a9\u06cc \u0639\u06a9\u0633 \u0628\u0646\u062f\u06cc \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0633\u06a9\u0631\u06cc\u067e \u0648\u0631\u06a9\u0631 \u06a9\u0648 \u0645\u062e\u062a\u0644\u0641 \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u0648\u06ba \u067e\u0631 \u0627\u0633\u06a9\u06cc\u0645\u0627 \u0627\u0631\u062a\u0642\u0627\u0621 \u06a9\u0627 \u0645\u0627\u0644\u06a9 \u0628\u0646\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0633\u06a9\u06cc\u0645\u0627 \u06a9\u06cc \u0645\u0644\u06a9\u06cc\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u062b\u0627\u0644\u06cc \u062c\u06af\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0627\u0633\u06a9\u06cc\u0645\u0627 \u06a9\u06cc \u0645\u0644\u06a9\u06cc\u062a \u0646\u06cc\u0686\u06d2 \u06a9\u06cc \u0637\u0631\u0641 \u0631\u06c1\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Scrapworker  \u2192  raw files in RustFS  +  signal row in Iceberg (from Pipeline)\nAirflow job  \u2192  reads raw via s3_path, applies schema, writes structured Iceberg table\n<\/code><\/pre>\n<p>\u0688\u0627\u0648\u0646 \u0627\u0633\u0679\u0631\u06cc\u0645 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u0688\u0648\u0645\u06cc\u0646 \u0627\u0648\u0631 \u0627\u0633\u06a9\u06cc\u0645\u0627 \u06a9\u0648 \u062c\u0627\u0646\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0679\u0627\u0626\u067e \u06a9\u0627\u0633\u0679\u0646\u06af\u060c nulls \u0627\u0648\u0631 \u067e\u0627\u0631\u0679\u06cc\u0634\u0646 \u0644\u06d2 \u0622\u0624\u0679 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u0631\u06a9\u06be\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0633\u06a9\u0631\u06cc\u067e \u0648\u0631\u06a9\u0631 \u0639\u0627\u0645 \u0627\u0648\u0631 \u067e\u062a\u0644\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u0648\u0688 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u062a\u0631\u0645\u06cc\u0645 \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-why-signal-publish-is-a-separate-airflow-task\">\u06a9\u06cc\u0648\u06ba \u0633\u06af\u0646\u0644 \u067e\u0628\u0644\u0634 \u06a9\u0631\u0646\u0627 \u0627\u06cc\u06a9 \u0627\u0644\u06af \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0679\u0627\u0633\u06a9 \u06c1\u06d2\u06d4<\/h4>\n<p>\u0633\u06a9\u0631\u06cc\u067e \u0648\u0631\u06a9\u0631 RustFS \u0644\u06a9\u06be\u062a\u0627 \u0627\u0648\u0631 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>status: finished<\/code> \u0631\u06cc\u0688\u06cc\u0633 \u0645\u06cc\u06ba <code>s3_path<\/code>. \u0627\u06cc\u06a9 \u0627\u0644\u06af \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0679\u0627\u0633\u06a9 \u0627\u0633 \u062d\u0627\u0644\u062a \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u06cc\u0633\u06cc \u06a9\u0648 \u0633\u06af\u0646\u0644 \u0644\u0627\u0626\u0646 \u067e\u0648\u0633\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u062a\u062d\u0631\u06cc\u0631\u0648\u06ba \u06a9\u0648 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0627\u0644\u06af \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u0627\u06af\u0631 Scrapworker RustFS \u06a9\u0648 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0641\u0648\u0631\u0627\u064b \u0628\u0639\u062f \u0646\u06cc\u0633\u06cc \u06a9\u0648 \u0634\u0627\u0626\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u062f\u0648\u0646\u0648\u06ba \u062a\u062d\u0631\u06cc\u0631\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u0645\u0648\u0688 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 Nessie \u06a9\u0627\u0645\u06cc\u0627\u0628 RustFS \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0627 \u0688\u06cc\u0679\u0627 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0633\u06af\u0646\u0644 \u06a9\u06d2 \u067e\u06be\u0646\u0633\u0627 \u06c1\u0648\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u06c1 \u06c1\u06cc \u0635\u0627\u0641 \u0628\u062d\u0627\u0644\u06cc \u06a9\u0627 \u0631\u0627\u0633\u062a\u06c1\u06d4 \u0648\u0627\u062d\u062f \u0622\u067e\u0634\u0646 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0631\u0627\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0645\u06cc\u06ba \u0628\u06d2 \u062d\u0633\u06cc \u06a9\u0627 \u0641\u0642\u062f\u0627\u0646 \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u06a9\u067e\u0644\u0688 \u0627\u067e\u0631\u0648\u0686 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u06c1\u0631 \u063a\u0644\u0637\u06cc \u06a9\u0648 \u0627\u0644\u06af \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 Nessie \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc\u0627\u06ba \u0635\u0631\u0641 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u06a9\u06cc \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634\u0648\u06ba \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u062c\u0633 \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u0633\u06a9\u0631\u06cc\u067e \u06cc\u0627 \u0628\u06d2 \u06a9\u0627\u0631 \u06a9\u0631\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 RustFS \u0627\u0648\u0631 Nessie \u06a9\u06cc \u063a\u0644\u0637\u06cc\u0627\u06ba \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0642\u0627\u0628\u0644 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-notes\">\u062d\u0648\u0627\u0644\u06c1:<\/h4>\n<ul>\n<li>\n<p>\u062e\u0627\u0645 \u0633\u06a9\u0631\u06cc\u067e \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0644\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>s3:\/\/warehouse\/raw\/<\/code>\u0628\u0627\u0644\u06a9\u0644 \u0646\u06cc\u0633\u06cc \u06a9\u06d2 \u0642\u0627\u0628\u0648 \u0633\u06d2 \u0628\u0627\u06c1\u0631\u06d4 \u0622\u0626\u0633 \u0628\u0631\u06af \u06a9\u06cc \u062a\u06c1\u06c1 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u0627\u0633 \u0631\u0627\u0633\u062a\u06d2 \u062a\u06a9 \u0646\u06c1\u06cc\u06ba \u067e\u06c1\u0646\u0686\u062a\u06cc\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0633\u06a9\u0631\u06cc\u067e \u0622\u067e\u0631\u06cc\u0679\u0631 \u0633\u06af\u0646\u0644 \u0679\u06cc\u0628\u0644 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u0639\u0644\u0627\u0642\u06d2 \u0645\u06cc\u06ba \u0648\u0627\u0642\u0639 \u06c1\u06d2\u06d4 <code>scraper<\/code> \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1\u06d4 \u0633\u06a9\u0631\u06cc\u067e \u0648\u0631\u06a9\u0631 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0686\u0644\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">curl -X POST http:\/\/localhost:19120\/iceberg\/v1\/main\/namespaces \n  -H \"Content-Type: application\/json\" \n  -d '{\"namespace\": [\"scraper\"]}'\n<\/code><\/pre>\n<h2 id=\"heading-path-forward\">\u0622\u06af\u06d2 \u06a9\u0627 \u0631\u0627\u0633\u062a\u06c1<\/h2>\n<p>\u06c1\u0645 \u0646\u06d2 \u06cc\u06c1\u0627\u06ba \u062c\u0648 \u0627\u0633\u0679\u06cc\u06a9 \u0628\u0646\u0627\u06cc\u0627 \u06c1\u06d2 \u0648\u06c1 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0627\u062f\u062e\u0627\u0644 \u06a9\u06cc \u067e\u0631\u062a \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u0628\u0646\u06cc\u0627\u062f \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u067e\u0631 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0631\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633\u06d2 \u0648\u0631\u0698\u0646 \u0648\u0627\u0644\u06d2 \u06a9\u06cc\u0679\u0644\u0627\u06af \u0645\u06cc\u06ba \u0679\u0631\u06cc\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0633 \u067e\u0631 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1\u0627\u06ba \u062f\u0648 \u0633\u0645\u062a\u0648\u06ba \u067e\u0631 \u063a\u0648\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-extending-capabilities\">\u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06cc \u062a\u0648\u0633\u06cc\u0639<\/h3>\n<p>\u06cc\u06c1 \u0627\u0633\u0679\u06cc\u06a9 \u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u0648 \u0628\u06c1\u062a\u0631 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0646\u0626\u06d2 \u0627\u062c\u0632\u0627\u0621 \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u0648 \u0645\u0632\u06cc\u062f \u0637\u0627\u0642\u062a\u0648\u0631 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0646\u0679\u06cc\u06a9 \u0648\u0634\u0648\u0633\u0646\u06cc\u06cc\u062a\u0627:<\/strong> \u0633\u06a9\u0631\u06cc\u067e \u0648\u0631\u06a9\u0631 \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06d2 \u06a9\u0631 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2: <code>status: failed<\/code> \u0631\u06cc\u0688\u06cc\u0633 \u06a9\u0648 \u067e\u0648\u0631\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0628\u06cc\u06a9 \u0622\u0641 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0633\u0627\u0626\u06cc\u0688 \u0631\u06cc\u0679 \u06a9\u0648 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0641\u06cc \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u06a9\u0631\u0627\u0644 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u06a9\u06cc \u062e\u0648\u062f \u06a9\u0648 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0635\u0644\u0627\u062d\u06cc\u062a\u0648\u06ba \u0645\u06cc\u06ba \u0628\u06c1\u062a\u0631\u06cc \u0622\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u0635\u0641\u062d\u06c1 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u0648 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u06a9\u0648 \u0628\u0627\u0644\u06a9\u0644 \u0628\u06be\u06cc \u0646\u0638\u0631 \u0622\u0646\u06d2 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0622\u0632\u0645\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u062a\u0631\u062a\u06cc\u0628 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642:<\/strong> \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u0627\u0633\u06a9\u06cc\u0645\u0627 \u06a9\u0648 \u063a\u0644\u0637 \u06a9\u0646\u0641\u06cc\u06af\u0631 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 <code>config.yaml<\/code> \u0648\u06c1 \u0631\u0646 \u0679\u0627\u0626\u0645 \u0645\u06cc\u06ba \u062e\u0627\u0645\u0648\u0634\u06cc \u0633\u06d2 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06a9\u062b\u0631 \u0631\u06cc\u0646\u06af\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06af\u06c1\u0631\u0627\u0626\u06cc \u0645\u06cc\u06ba \u06af\u0631 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <code>validate_config()<\/code> \u0627\u0633\u06d2 \u0633\u0679\u0627\u0631\u0679 \u0627\u067e \u067e\u0631 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u063a\u0627\u0626\u0628 \u0645\u0637\u0644\u0648\u0628\u06c1 \u0641\u06cc\u0644\u0688 \u067e\u06a9\u0691 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2: <code>offset_param<\/code> \u06cc\u0627 <code>response_map<\/code> \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u06a9\u0627\u0645 \u0686\u0644 \u062c\u0627\u0626\u06d2\u06d4 \u06cc\u06c1 \u0645\u0632\u06cc\u062f \u0627\u06c1\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0645\u0632\u06cc\u062f \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u06a9\u0627\u062a \u0634\u0627\u0645\u0644 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u0634\u0627\u06c1\u062f\u06c1:<\/strong> \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u0627\u0644\u0631\u0679\u0633 \u0627\u0648\u0631 SLA \u0645\u0627\u0646\u06cc\u0679\u0631\u0646\u06af \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u0627\u0646\u062a\u0628\u0627\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0628 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u0627 \u0634\u06cc\u0688\u0648\u0644 \u0686\u06be\u0648\u0679 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u06cc\u0627 \u0645\u0644\u0627\u0632\u0645\u062a\u0648\u06ba \u0645\u06cc\u06ba \u062a\u0648\u0642\u0639 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0642\u062a \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u06af\u0646\u0644 \u0679\u06cc\u0628\u0644 \u06cc\u06c1\u0627\u06ba \u0628\u06be\u06cc \u06a9\u0627\u0631\u0622\u0645\u062f \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u06c1\u0644\u06a9\u0627 \u067e\u06be\u0644\u06a9\u0627 \u0645\u0627\u0646\u06cc\u0679\u0631 \u062c\u0648 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u0679\u0627\u0626\u0645 \u0641\u0631\u06cc\u0645 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0645\u062a\u0648\u0642\u0639 \u0633\u06af\u0646\u0644 \u06a9\u06cc \u0642\u0637\u0627\u0631\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 SLA \u0686\u06cc\u06a9 \u06c1\u06d2 \u062c\u0648 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0628\u06cc\u0631\u0648\u0646\u06cc \u0679\u0648\u0644\u0632 \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-adding-layers\">\u067e\u0631\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u06c1\u06d2 \u062c\u0648 \u06c1\u0645\u0627\u0631\u06cc \u06a9\u0644\u06cc\u06a9\u0634\u0646 \u0641\u0627\u0624\u0646\u0688\u06cc\u0634\u0646 \u067e\u0631 \u0628\u0646\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u062a\u06c1\u0648\u06ba \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba:<\/strong> \u062e\u0627\u0645 \u0622\u0626\u0633 \u0628\u0631\u06af \u0679\u06cc\u0628\u0644 \u062c\u0648 \u0627\u062f\u062e\u0627\u0644 \u06a9\u06cc \u067e\u0631\u062a \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u0648\u06c1 \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06d2 \u0645\u0631\u062d\u0644\u06d2 \u06a9\u0627 \u0627\u0646 \u067e\u0679 \u06c1\u06d2\u06d4 \u0688\u06cc \u0628\u06cc \u0679\u06cc \u06cc\u0627 \u0627\u0633\u067e\u0627\u0631\u06a9 \u0627\u06cc\u0633 \u06a9\u06cc\u0648 \u0627\u06cc\u0644 \u062e\u0627\u0645 \u0633\u06d2 \u067e\u0691\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633\u06a9\u06cc\u0645\u0627 \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0642\u0633\u0645 \u06a9\u06cc \u06a9\u0679\u0627\u0626\u06cc \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0644\u06af \u0627\u0644\u06af \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u067e\u0631 \u0633\u0627\u062e\u062a\u06cc \u0645\u06cc\u0632\u06cc\u06ba \u0644\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 ELT \u06a9\u0627 L \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0646\u0679\u06cc\u06a9 \u06a9\u06d2 \u0645\u0633\u062a\u062d\u06a9\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0642\u062f\u0631\u062a\u06cc \u0627\u06af\u0644\u0627 \u0645\u0631\u062d\u0644\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u06c1\u0631\u0645\u06cc\u0646\u06cc\u0679\u06a9\u0633:<\/strong> Trino \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0627\u0633\u0679\u06cc\u06a9 \u0645\u06cc\u06ba \u06c1\u06d2 \u0627\u0648\u0631 \u062c\u0632\u0648\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u0631\u0628\u0648\u0637 \u06c1\u06d2\u06d4 Nessie \u0633\u06d2 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0646\u0633\u0644\u06a9 \u062a\u0645\u0627\u0645 \u0622\u0626\u0633 \u0628\u0631\u06af \u0679\u06cc\u0628\u0644\u0632 \u067e\u0631 SQL \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u0648 \u0642\u0627\u0628\u0644 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u0628 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u0627\u06cc\u06a9 \u0633\u067e\u0631 \u0633\u06cc\u0679 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0627\u062f\u062e\u0627\u0644 \u06a9\u06cc \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u062a\u0635\u0648\u0631 \u06a9\u06cc \u0627\u06cc\u06a9 \u067e\u0631\u062a \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0645\u0632\u06cc\u062f \u0648\u0633\u06cc\u0639 \u0630\u0631\u06cc\u0639\u06c1 \u0622\u0646 \u0628\u0648\u0631\u0688\u0646\u06af:<\/strong> \u0641\u06cc \u0627\u0644\u062d\u0627\u0644\u060c \u0627\u0633\u0679\u06cc\u06a9 \u0627\u06cc\u06a9 \u0627\u062f\u062e\u0627\u0644 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2: \u0627\u06cc\u06a9 \u0637\u06d2 \u0634\u062f\u06c1 \u0627\u06cc\u0626\u0631 \u0641\u0644\u0648 \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u062c\u0648 \u0627\u06cc\u06a9 \u0628\u06cc\u0631\u0648\u0646\u06cc HTTP \u06a9\u0631\u0627\u0644\u0631 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0648\u06c1\u06cc \u0641\u0627\u0624\u0646\u0688\u06cc\u0634\u0646 \u067e\u0644 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0630\u0631\u0627\u0626\u0639 \u06a9\u06cc \u062d\u0645\u0627\u06cc\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u0633\u06cc \u0688\u06cc \u0633\u06cc \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633\u060c \u0627\u0648\u0631 \u067e\u0634 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0630\u0631\u0627\u0626\u0639\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u0627\u0641\u06a9\u0627 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u0648\u0646\u0679 \u0627\u0633\u0679\u0631\u06cc\u0645\u0632\u06d4 \u0622\u0626\u0633 \u0628\u0631\u06af \u0679\u06cc\u0628\u0644\u0632 \u0627\u0648\u0631 \u0646\u06cc\u0633\u06cc \u06a9\u06cc\u0679\u0644\u0627\u06af \u0644\u06cc\u0646\u0688\u0646\u06af \u0632\u0648\u0646 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0642\u0637\u0639 \u0646\u0638\u0631 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u06a9\u06cc\u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0627\u0635\u0648\u0644:<\/strong> \u0622\u0626\u0633 \u0628\u0631\u06af \u0627\u0648\u0631 \u0646\u06cc\u0633\u06cc \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u0641\u0627\u0624\u0646\u0688\u06cc\u0634\u0646 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0633\u0646\u06cc\u067e \u0634\u0627\u0679\u0633\u060c \u0627\u0633\u06a9\u06cc\u0645\u0627 \u0627\u06cc\u0648\u0648\u0644\u0648\u0634\u0646\u060c \u06a9\u0645\u0679 \u06c1\u0633\u0679\u0631\u06cc \u0627\u0648\u0631 \u0679\u0627\u0626\u0645 \u0679\u0631\u06cc\u0648\u0644 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0639\u0644\u06cc\u0670 \u062d\u06a9\u0645\u0631\u0627\u0646\u06cc \u06a9\u06cc \u062a\u06c1\u06c1 \u0645\u06cc\u06ba \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0627\u0636\u0627\u0641\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u06cc\u0633\u06d2 \u0631\u0633\u0627\u0626\u06cc \u06a9\u0646\u0679\u0631\u0648\u0644\u060c \u0688\u06cc\u0679\u0627 \u06a9\u0648\u0627\u0644\u0679\u06cc \u0686\u06cc\u06a9\u060c \u0646\u0633\u0628 \u0633\u06d2 \u0628\u0627\u062e\u0628\u0631 \u0631\u06c1\u0646\u0627\u060c \u0627\u0648\u0631 \u0627\u0633\u06a9\u06cc\u0645\u0627 \u0646\u0627\u0641\u0630 \u06a9\u0631\u0646\u0627\u06d4 \u06cc\u06c1\u0627\u06ba \u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0633\u06cc \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0648\u06c1 \u0627\u0633 \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0688\u06cc\u0679\u0627 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u0628\u0646\u0627\u0646\u0627 \u06a9\u0644\u0627\u0624\u0688 \u0688\u06cc\u0679\u0627 \u0627\u06cc\u0646\u0627\u0644\u06cc\u0679\u06a9\u0633 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645\u0632 \u062c\u06cc\u0633\u06d2 Databricks\u060c Snowflake\u060c \u0627\u0648\u0631 BigQuery \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u0633\u0627\u0646 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0686\u06be\u0648\u0679\u06cc \u0633\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646\u06d2 \u062f\u0631\u062c\u06d2 \u06a9\u06cc \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0648\u0633\u06cc\u0639 \u0627\u0648\u0631 \u062a\u0648\u0633\u06cc\u0639 \u06a9\u06d2 \u0632\u0628\u0631\u062f\u0633\u062a \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u067e\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0644\u06cc\u06a9\u0646 \u062a\u062c\u0627\u0631\u062a \u06a9\u0627 \u0645\u0642\u0635\u062f \u0635\u0631\u0641 \u0622\u0641 \u0633\u0627\u0626\u0679 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06a9\u0648 \u0644\u06cc\u0632 \u067e\u0631 \u062f\u06cc\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u06cc\u06ba \u0622\u067e\u0631\u06cc\u0634\u0646\u0644 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":22705,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-22704","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/22704","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=22704"}],"version-history":[{"count":1,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/22704\/revisions"}],"predecessor-version":[{"id":22706,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/22704\/revisions\/22706"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media\/22705"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=22704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=22704"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=22704"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}