Chuyển đến nội dung chính

Avro và Parquet: So sánh toàn diện cho lưu trữ dữ liệu lớn

So sánh chi tiết giữa Avro và Parquet, bao quát kiến trúc, trường hợp sử dụng, hiệu năng và cách chúng hòa hợp với quy trình dữ liệu lớn hiện đại.
Tim Lu
Tim Lu

Tạo tài khoản miễn phí của bạn

Luyện tập và Lộ trình tiến trình của bạn.

Tiếp tục với GoogleBằng cách tiếp tục, bạn chấp nhận Điều khoản sử dụng, Chính sách quyền riêng tư và việc dữ liệu của bạn được lưu trữ tại Hoa Kỳ.

Lưu trữ dữ liệu hiệu quả là một phần then chốt của bất kỳ hệ thống dữ liệu lớn nào. Avro và Parquet là hai định dạng được sử dụng rộng rãi, mỗi định dạng được thiết kế cho các loại khối lượng công việc khác nhau — Avro vượt trội trong streaming và tiến hóa lược đồ (schema evolution), trong khi Parquet được tối ưu cho phân tích và hiệu quả lưu trữ. Hiểu rõ sự khác biệt của chúng là điều thiết yếu để xây dựng các pipeline dữ liệu có khả năng mở rộng.

Hướng dẫn này phân tích kiến trúc, trường hợp sử dụng, và cách chúng hòa hợp với quy trình dữ liệu hiện đại.

Avro là gì?

Avro là định dạng lưu trữ theo hàng (row-based) được phát triển cho dự án Apache Hadoop. Nó được thiết kế để tuần tự hóa dữ liệu hiệu quả nhằm trao đổi giữa các hệ thống, đặc biệt hữu ích cho nền tảng dữ liệu streaming và các ứng dụng phân tán. 

Avro định nghĩa lược đồ bằng JSON để con người dễ đọc, nhưng dữ liệu thực tế được lưu ở định dạng nhị phân gọn nhẹ nhằm đạt hiệu quả. Thiết kế này cho phép vừa quản lý lược đồ dễ dàng vừa tuần tự hóa nhanh.

Tính năng của Avro

Avro mang lại một số lợi thế, đặc biệt về tiến hóa lược đồ và hiệu quả lưu trữ:

  • Tiến hóa lược đồ (Schema evolution): Avro nhúng siêu dữ liệu lược đồ vào trong dữ liệu, cho phép tiến hóa lược đồ liền mạch. Điều này có nghĩa có thể thêm trường mới hoặc chỉnh sửa trường hiện có mà không cần ghi lại toàn bộ tập dữ liệu, giúp Avro rất linh hoạt cho các pipeline dữ liệu.
  • Tuần tự hóa gọn nhẹ: Tuần tự hóa nhị phân của Avro giảm thiểu chi phí lưu trữ và tăng hiệu năng trong các tình huống trao đổi dữ liệu. Đặc biệt hữu ích trong môi trường mà việc tuần tự hóa/giải tuần tự hóa hiệu quả là tối quan trọng, như hàng đợi thông điệp và luồng dữ liệu.

Trường hợp sử dụng của Avro

  • Hệ thống streaming và nhắn tin – Thường dùng trong Apache Kafka để tuần tự hóa sự kiện hiệu quả.
  • Trao đổi dữ liệu và khả năng tương tác – Lý tưởng để chia sẻ dữ liệu có cấu trúc giữa các ứng dụng khác nhau.
  • Lưu trữ theo hàng – Hoạt động tốt cho khối lượng công việc cần ghi và đọc tuần tự theo hàng.

Parquet là gì?

Parquet là định dạng lưu trữ theo cột (columnar) được tối ưu cho khối lượng công việc phân tích hiệu năng cao. Khác với các định dạng theo hàng như Avro, Parquet lưu dữ liệu theo cột, nhờ đó hiệu quả hơn nhiều cho phân tích dữ liệu lớn. Được phát triển bởi Apache, Parquet được sử dụng rộng rãi trong kho dữ liệu và các khung tính toán phân tán như Apache Spark và Hadoop.

Tính năng của Parquet

Parquet được thiết kế cho hiệu năng phân tích, cung cấp các lợi ích chính như:

  • Lưu trữ theo cột: Vì Parquet lưu dữ liệu theo cột, truy vấn có thể quét hiệu quả chỉ các cột cần thiết thay vì nạp toàn bộ hàng. Điều này giảm I/O đĩa, giúp truy vấn nhanh hơn, đặc biệt trong khối lượng công việc thiên đọc.
  • Nén hiệu quả: Parquet sử dụng các kỹ thuật nén tiên tiến như dictionary encoding, run-length encoding và bit-packing, giảm chi phí lưu trữ đồng thời duy trì tốc độ truy vấn cao. Do các kiểu dữ liệu tương tự được lưu cùng nhau, Parquet đạt tỉ lệ nén tốt hơn so với định dạng theo hàng.

Trường hợp sử dụng của Parquet

  • Kho dữ liệu và phân tích – Dùng trên các nền tảng như Amazon Redshift, Google BigQuery và Snowflake.
  • Xử lý dữ liệu lớn – Tối ưu cho các khung tính toán phân tán như Apache Spark và Presto.
  • Hiệu năng truy vấn cao – Lý tưởng cho khối lượng công việc thiên đọc, nơi chỉ cần một số cột cụ thể.

Để tìm hiểu sâu hơn về Parquet và cách làm việc thực tế, hãy xem hướng dẫn Apache Parquet.

Sự khác nhau giữa Avro và Parquet

Avro và Parquet là các định dạng lưu trữ dữ liệu được sử dụng rộng rãi trong hệ sinh thái dữ liệu lớn, nhưng chúng phục vụ các mục đích khác nhau và vượt trội trong những bối cảnh khác nhau. Dưới đây là phần so sánh chi tiết về sự khác biệt của chúng.

Cấu trúc dữ liệu

  • Avro: Sử dụng định dạng lưu trữ theo hàng, nghĩa là toàn bộ bản ghi được lưu tuần tự. Điều này giúp Avro hiệu quả cho khối lượng công việc thiên ghi, nơi dữ liệu cần được thêm nhanh.
  • Parquet: Sử dụng định dạng lưu trữ theo cột, nơi dữ liệu được lưu theo cột thay vì theo hàng. Cấu trúc này có lợi cho truy vấn phân tích cần đọc chỉ một số cột cụ thể thay vì cả hàng.

Hình dung lưu trữ theo hàng so với theo cột

Để hiểu rõ hơn sự khác biệt giữa lưu trữ theo hàng (Avro) và theo cột (Parquet), hãy xem xét tập dữ liệu này:

ID

Name

Age

City

101

Alice

25

New York

102

Bob

30

Chicago

103

Carol

28

Seattle

Cách Avro lưu dữ liệu (theo hàng):

  • [101, Alice, 25, New York]
  • [102, Bob, 30, Chicago]
  • [103, Carol, 28, Seattle]

Mỗi bản ghi được lưu tuần tự, giúp hiệu quả cho thao tác ghi nhưng chậm hơn khi truy vấn các trường cụ thể.

Cách Parquet lưu dữ liệu (theo cột):

  • ID: [101, 102, 103]
  • Name: [Alice, Bob, Carol]
  • Age: [25, 30, 28]
  • City: [New York, Chicago, Seattle]

Mỗi cột được lưu riêng, giúp truy xuất nhanh hơn chỉ các cột cần thiết (ví dụ: chỉ truy vấn cột "Age").

Tiến hóa lược đồ

  • Avro: Được thiết kế cho tiến hóa lược đồ, cho phép thêm hoặc chỉnh sửa trường mới mà không phá vỡ khả năng tương thích với dữ liệu cũ. Lược đồ được lưu cùng dữ liệu, khiến nó tự mô tả.
  • Parquet: Hỗ trợ tiến hóa lược đồ nhưng kém linh hoạt hơn Avro. Thay đổi lược đồ có thể phức tạp hơn, đặc biệt khi thêm hoặc chỉnh sửa cấu trúc cột.

Nén và hiệu quả lưu trữ

  • Avro: Dùng mã hóa nhị phân gọn nhẹ, nhưng không tận dụng kỹ thuật nén theo cột, dẫn đến kích thước tệp lớn hơn so với Parquet.
  • Parquet: Dùng các kỹ thuật nén theo cột như dictionary encoding, run-length encoding và bit-packing, giúp tiết kiệm dung lượng hơn, đặc biệt với tập dữ liệu lớn.

Hiệu năng truy vấn

  • Avro: Không được tối ưu cho truy vấn phân tích do lưu dữ liệu theo hàng. Quét các tập dữ liệu lớn cần đọc toàn bộ bản ghi, dẫn tới truy vấn chậm hơn trong tác vụ phân tích.
  • Parquet: Tối ưu cho truy vấn nhanh, đặc biệt khi chỉ cần một tập con các cột. Cấu trúc theo cột cho phép quét chọn lọc, cải thiện hiệu năng trong phân tích dữ liệu lớn.

Hiệu quả ghi và đọc

  • Avro: Cung cấp tốc độ ghi nhanh vì lưu dữ liệu theo từng hàng. Tuy nhiên, thao tác đọc có thể chậm hơn cho phân tích vì phải đọc toàn bộ hàng.
  • Parquet: Tối ưu cho hiệu năng đọc nhưng có thể ghi chậm hơn do chi phí quản lý lưu trữ theo cột và kỹ thuật nén.

Bảng so sánh Avro và Parquet

Tính năng

Avro

Parquet

Định dạng lưu trữ

Theo hàng (lưu toàn bộ bản ghi tuần tự)

Theo cột (lưu dữ liệu theo cột)

Phù hợp nhất cho

Streaming, dữ liệu sự kiện, tiến hóa lược đồ

Truy vấn phân tích, phân tích dữ liệu lớn

Tiến hóa lược đồ

Xuất sắc – lược đồ được lưu cùng dữ liệu, cho phép cập nhật liền mạch

Giới hạn – có thể tiến hóa lược đồ nhưng cần xử lý cẩn trọng

Nén

Mã hóa nhị phân gọn nhẹ nhưng ít tối ưu cho phân tích

Nén cao nhờ kỹ thuật nén theo cột (dictionary encoding, run-length encoding, bit-packing)

Hiệu năng đọc

Chậm hơn cho phân tích vì phải đọc toàn bộ hàng

Nhanh hơn cho phân tích vì chỉ đọc các cột cần thiết

Hiệu năng ghi

Nhanh – thêm toàn bộ hàng nhanh chóng

Chậm hơn – lưu trữ theo cột cần xử lý bổ sung

Hiệu quả truy vấn

Kém hiệu quả cho truy vấn phân tích do cấu trúc theo hàng

Rất hiệu quả cho truy vấn phân tích vì chỉ quét các cột cần thiết

Kích thước tệp

Thường lớn hơn do lưu trữ theo hàng

Nhỏ hơn nhờ kỹ thuật nén tốt hơn

Trường hợp sử dụng

Kiến trúc hướng sự kiện, hệ thống nhắn tin Kafka, lưu trữ log

Data lake, kho dữ liệu, quy trình ETL, khối lượng công việc phân tích

Khung xử lý

Hoạt động tốt với Apache Kafka, Hadoop, Spark

Tối ưu cho Apache Spark, Hive, Presto, Snowflake

Hỗ trợ dữ liệu lồng nhau

Hỗ trợ dữ liệu lồng nhau, nhưng cần định nghĩa lược đồ

Tối ưu cho cấu trúc lồng nhau, phù hợp hơn cho dữ liệu phân cấp

Khả năng tương tác

Được dùng rộng rãi trong các nền tảng streaming

Ưu tiên cho xử lý dữ liệu lớn và khối lượng công việc phân tích

Phần mở rộng tệp

.avro

.parquet

Ngành áp dụng chủ đạo

Nền tảng streaming, logging, pipeline thời gian thực

Kho dữ liệu, phân tích, business intelligence

Khi nào dùng Avro và khi nào dùng Parquet

Việc lựa chọn giữa Avro và Parquet phụ thuộc vào trường hợp sử dụng cụ thể, đặc điểm khối lượng công việc và yêu cầu xử lý dữ liệu của bạn. Dưới đây là các nguyên tắc thực tiễn giúp bạn quyết định khi nào dùng mỗi định dạng.

Khi nào dùng Avro

Avro phù hợp nhất cho các tình huống cần tuần tự hóa hiệu quả, tiến hóa lược đồ và lưu trữ theo hàng. Hãy cân nhắc dùng Avro trong các trường hợp sau:

  • Pipeline dữ liệu streaming và hướng sự kiện: Avro được dùng rộng rãi trong các nền tảng streaming thời gian thực như Apache Kafka nhờ định dạng nhị phân gọn và tuần tự hóa hiệu quả.
  • Thay đổi lược đồ thường xuyên: Avro là lựa chọn ưu tiên khi làm việc với lược đồ dữ liệu tiến hóa vì nhúng lược đồ trong tệp, cho phép chỉnh sửa mượt mà mà không phá vỡ tương thích.
  • Trao đổi và tích hợp dữ liệu giữa hệ thống: Avro thường được dùng để truyền dữ liệu có cấu trúc giữa các ứng dụng khác nhau nhờ lược đồ tự mô tả và hỗ trợ nhiều ngôn ngữ lập trình.
  • Khối lượng công việc thiên ghi: Nếu quy trình của bạn thường xuyên ghi hoặc append, Avro hoạt động tốt hơn Parquet. Nó lưu dữ liệu theo hàng tuần tự mà không tốn chi phí cho lập chỉ mục theo cột.
  • Lưu trữ log và thu thập dữ liệu thô: Avro thường được dùng trong hệ thống ghi log hoặc lưu dữ liệu thô chưa xử lý nhờ lưu trữ theo hàng hiệu quả và khả năng ghi nhận bản ghi chi tiết.

Khi nào dùng Parquet

Parquet lý tưởng cho khối lượng công việc phân tích, xử lý dữ liệu lớn và hiệu quả lưu trữ. Hãy dùng Parquet khi:

  • Truy vấn phân tích và kho dữ liệu: Nếu mục tiêu chính là hiệu năng truy vấn nhanh trong data lake, kho dữ liệu, hoặc OLAP (Hệ thống Xử lý Phân tích Trực tuyến), cấu trúc theo cột của Parquet rất hiệu quả.
  • Khối lượng công việc thiên đọc: Parquet được tối ưu cho các tình huống dữ liệu được đọc thường xuyên nhưng ghi ít hơn, như bảng điều khiển BI, báo cáo và phân tích theo lô.
  • Dữ liệu lớn và xử lý phân tán: Parquet là định dạng ưu tiên cho các khung dữ liệu lớn như Apache Spark, Hive, Presto và Snowflake, nơi lưu trữ theo cột giảm chi phí I/O và cải thiện hiệu năng.
  • Nén và tối ưu lưu trữ: Nếu ưu tiên hiệu quả lưu trữ, các kỹ thuật nén tiên tiến của Parquet (ví dụ: dictionary encoding, run-length encoding) sẽ giảm đáng kể kích thước tệp so với định dạng theo hàng.
  • Đọc chọn lọc cột và chiếu lược đồ: Khi làm việc với tập dữ liệu lớn nhưng chỉ truy vấn một vài cột, Parquet cho phép quét chọn lọc cột, khiến truy vấn nhanh hơn và tiết kiệm chi phí đáng kể.

Bạn nên chọn định dạng nào?

Kịch bản

Định dạng khuyến nghị

Streaming thời gian thực (Kafka, log, nhắn tin)

✅ Avro

Thay đổi lược đồ thường xuyên / cấu trúc dữ liệu tiến hóa

✅ Avro

Lưu trữ theo hàng để ghi nhanh

✅ Avro

Trao đổi dữ liệu giữa các ứng dụng

✅ Avro

Phân tích dữ liệu lớn và truy vấn

✅ Parquet

Lưu trữ và nén hiệu quả

✅ Parquet

Khối lượng công việc thiên đọc (data lake, kho dữ liệu)

✅ Parquet

Truy vấn và lọc theo cột

✅ Parquet

Cách Avro và Parquet hoạt động với các công cụ dữ liệu lớn

Avro và Parquet được sử dụng trong các khung xử lý dữ liệu lớn, các nền tảng đám mây và môi trường tính toán phân tán. Dưới đây là tổng quan về cách Avro và Parquet tích hợp với các công cụ dữ liệu lớn phổ biến.

Apache Spark

Apache Spark là một khung tính toán phân tán được dùng rộng rãi để xử lý các tập dữ liệu lớn. Nó hỗ trợ cả Avro và Parquet, nhưng mỗi định dạng có ưu thế riêng tùy trường hợp sử dụng.

Dùng Avro trong Apache Spark

  • Avro lý tưởng cho nạp dữ liệu (ingestion) và các pipeline ETL nhờ cấu trúc theo hàng.
  • Cho phép tiến hóa lược đồ, trở thành lựa chọn ưa thích cho pipeline streaming với Kafka.
  • Thường dùng làm định dạng trung gian trước khi chuyển dữ liệu sang định dạng thân thiện cho phân tích như Parquet.

Ví dụ:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("AvroExample").getOrCreate()

# Read Avro file
df = spark.read.format("avro").load("data.avro")
df.show()

# Write DataFrame to Avro
df.write.format("avro").save("output.avro")

Dùng Parquet trong Apache Spark

  • Parquet được tối ưu cho phân tích và xử lý theo lô (batch) trong Spark.
  • Vì truy vấn Spark thường quét các cột cụ thể, lưu trữ theo cột của Parquet giúp giảm I/O và tăng tốc truy vấn.
  • Nó là định dạng lưu trữ mặc định trong nhiều data lake và môi trường phân tích.

Ví dụ:

# Read Parquet file
df = spark.read.parquet("data.parquet")
df.show()

# Write DataFrame to Parquet
df.write.mode("overwrite").parquet("output.parquet")

Apache Hive và Presto

Apache Hive và Presto là các công cụ truy vấn dựa trên SQL được thiết kế cho dữ liệu lớn. Cả hai hỗ trợ Avro và Parquet nhưng hành vi khác nhau:

Avro trong Hive và Presto

  • Dùng trong quy trình nạp dữ liệu trước khi chuyển đổi sang định dạng tối ưu.
  • Cung cấp linh hoạt cho tiến hóa lược đồ, nhưng truy vấn có thể chậm do quét theo hàng.

Ví dụ:

CREATE EXTERNAL TABLE avro_table
STORED AS AVRO
LOCATION 's3://my-data-bucket/avro/';

Parquet trong Hive và Presto

  • Định dạng ưa thích cho phân tích nhờ cắt tỉa cột (column pruning) và nén hiệu quả.
  • Truy vấn nhanh hơn đáng kể vì chỉ đọc các cột cần thiết.

Ví dụ:

CREATE EXTERNAL TABLE parquet_table
STORED AS PARQUET
LOCATION 's3://my-data-bucket/parquet/';

Apache Kafka

Kafka là nền tảng streaming dữ liệu thời gian thực, và Avro là tiêu chuẩn thực tế cho tuần tự hóa thông điệp.

Vì sao Avro được ưa chuộng trong Kafka

  • Định dạng nhị phân gọn giúp thông điệp nhỏ hơn, giảm băng thông và chi phí lưu trữ.
  • Hỗ trợ tiến hóa lược đồ đảm bảo tương thích giữa producer và consumer.
  • Hoạt động mượt với Confluent Schema Registry, cho phép quản lý phiên bản lược đồ.

Ví dụ:

from confluent_kafka import avro
from confluent_kafka.avro import AvroProducer

schema_registry_url = "http://localhost:8081"
avro_producer = AvroProducer({'bootstrap.servers': 'localhost:9092',
                              'schema.registry.url': schema_registry_url},
                             default_value_schema=avro.loads(value_schema_str))

avro_producer.produce(topic='avro_topic', value={"id": 1, "name": "Alice"})
avro_producer.flush()

Nền tảng dữ liệu đám mây (AWS, GCP, Azure)

Cả Avro và Parquet đều được các nền tảng đám mây lớn hỗ trợ nhưng được dùng theo cách khác nhau.

AWS (Amazon S3, Glue, Redshift, Athena)

  • Avro: Dùng để lưu trữ dữ liệu streaming và tiến hóa lược đồ trong các tác vụ ETL của AWS Glue.
  • Parquet: Ưu tiên sử dụng trong AWS Athena, Redshift Spectrum và data lake để phân tích nhanh hơn.
SELECT * FROM my_parquet_table WHERE year = 2023;

Google Cloud Platform (BigQuery, Dataflow, GCS)

  • Avro: Dùng để nạp dữ liệu thô trong Google Dataflow.
  • Parquet: Tối ưu cho Google BigQuery, cho phép truy xuất theo cột.
LOAD DATA INTO my_dataset.my_table
FROM 'gs://my-bucket/data.parquet'
FORMAT PARQUET;

Azure (Azure Data Lake, Synapse Analytics, Databricks)

Pipeline ETL và kho dữ liệu

Cả hai định dạng đóng vai trò khác nhau trong pipeline ETL:

Giai đoạn ETL

Định dạng tốt nhất

Lý do

Nạp (Streaming và Log)

✅ Avro

Hiệu quả cho nạp dữ liệu thời gian thực (Kafka, IoT, event log).

Xử lý trung gian

✅ Avro

Tiến hóa lược đồ cho phép biến đổi dữ liệu mà không làm gãy pipeline.

Lưu trữ cuối (Phân tích và BI)

✅ Parquet

Truy vấn nhanh và lưu trữ tối ưu cho truy xuất theo cột.

Kết luận

Avro và Parquet là những định dạng lưu trữ thiết yếu trong hệ sinh thái dữ liệu lớn, mỗi định dạng phục vụ các mục đích khác nhau. Bài viết này đã khám phá kiến trúc kỹ thuật, trường hợp sử dụng, tích hợp với công cụ dữ liệu lớn và vai trò trong pipeline ETL của chúng.

Những điểm chính bao gồm:

  • Định dạng theo hàng của Avro hiệu quả cho streaming, tiến hóa lược đồ và tuần tự hóa dữ liệu.
  • Định dạng theo cột của Parquet tối ưu truy vấn phân tích, nén và hiệu quả lưu trữ.
  • Các công cụ dữ liệu lớn như Apache Spark, Hive và Kafka tích hợp với các định dạng này theo những cách khác nhau.
  • Pipeline ETL thường sử dụng cả hai, với Avro xử lý nạp dữ liệu thô và Parquet hỗ trợ phân tích hiệu quả.

Để xây dựng nền tảng vững chắc về kho dữ liệu và xử lý dữ liệu lớn, hãy khám phá Khái niệm Kho Dữ liệu. Để hiểu về xử lý dữ liệu thời gian thực so với theo lô, đọc Xử lý Theo lô vs. Xử lý Dòng. Để thực hành với các công cụ dữ liệu lớn, khóa học Nền tảng Dữ liệu Lớn với PySpark là điểm khởi đầu tuyệt vời.

Hiểu các định dạng lưu trữ này và cách áp dụng là chìa khóa để thiết kế kiến trúc dữ liệu hiệu quả và có khả năng mở rộng.

Câu hỏi thường gặp

Vì sao Parquet được ưa chuộng cho phân tích?

Định dạng theo cột của Parquet giúp nó cực kỳ hiệu quả cho các truy vấn chỉ truy cập một số cột cụ thể. Nó giảm chi phí xử lý dư thừa và mang lại khả năng nén xuất sắc cho dữ liệu lặp lại, khiến Parquet lý tưởng cho kho dữ liệu và công cụ business intelligence.

Khác biệt lưu trữ giữa Avro và Parquet là gì?

Avro dùng lưu trữ theo hàng, phù hợp cho xử lý dữ liệu tuần tự, trong khi lưu trữ theo cột của Parquet giảm kích thước khối lượng công việc phân tích và tối ưu hiệu năng truy vấn.

Định dạng nào nén tốt hơn?

Parquet thường cung cấp khả năng nén tốt hơn do cấu trúc theo cột và khả năng áp dụng hiệu quả các thuật toán nén tiên tiến.

Có thể dùng Avro và Parquet cùng nhau không?

Có, nhiều quy trình làm việc dùng cả hai định dạng. Ví dụ, Avro thường dùng để nạp dữ liệu và streaming, trong khi Parquet dùng để lưu trữ dữ liệu đã xử lý trong data lake hoặc kho dữ liệu phục vụ truy vấn phân tích.

Avro và Parquet tích hợp với các công cụ dữ liệu lớn như thế nào?

Cả hai định dạng đều được hỗ trợ bởi các khung dữ liệu lớn phổ biến như Apache Hadoop, Spark và Hive. Avro thường dùng cho pipeline nạp dữ liệu, trong khi Parquet được ưa chuộng cho các tác vụ phân tích trong data lake và kho dữ liệu.

Tim Lu

Tác giả

Tim Lu

Tôi là một nhà khoa học dữ liệu có kinh nghiệm về phân tích không gian, học máy và đường ống dữ liệu. Tôi đã làm việc với GCP, Hadoop, Hive, Snowflake, Airflow và các quy trình khoa học/kỹ thuật dữ liệu khác.

Chủ đề

Liên quan