x-spark-common:
  &spark-air
  build:
    context: .
    dockerfile: spark.Dockerfile
    target: spark 

services:
  spark:
    <<: *spark-air
    environment:
      - SPARK_MODE=master
    ports:
      - '7077:7077'
    configs:
      - source: run_sql
        target: /spark-script/run_sql.sh
        mode: 0755
      - source: create_table
        target: /spark-script/create-table.sql
        mode: 0755
      - source: query_table
        target: /spark-script/query-table.sql
        mode: 0755
  spark-worker:
    <<: *spark-air
    environment:
      - SPARK_MODE=worker
      - SPARK_MASTER_URL=spark://spark:7077
      - SPARK_WORKER_MEMORY=1G
      - SPARK_WORKER_CORES=1

configs:
  run_sql:
    content: |
      set -ex
      
      spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-3.2_2.12:1.1.0,org.apache.hadoop:hadoop-aws:3.3.2\
          --master spark://spark:7077 \
          --conf spark.sql.catalog.demo=org.apache.iceberg.spark.SparkCatalog \
          --conf spark.sql.catalog.demo.type=hadoop \
          --conf spark.sql.catalog.demo.warehouse=s3a://hummock001/iceberg-data \
          --conf spark.sql.catalog.demo.hadoop.fs.s3a.endpoint=http://minio-0:9301 \
          --conf spark.sql.catalog.demo.hadoop.fs.s3a.path.style.access=true \
          --conf spark.sql.catalog.demo.hadoop.fs.s3a.access.key=hummockadmin \
          --conf spark.sql.catalog.demo.hadoop.fs.s3a.secret.key=hummockadmin \
          --conf spark.sql.defaultCatalog=demo \
          -f /spark-script/$1.sql

  query_table:
    content: |
      SELECT * from demo.demo_db.demo_table;
  create_table:
    content: |
      drop table if exists demo.demo_db.demo_table;
      
      CREATE TABLE demo.demo_db.demo_table
      (
        user_id bigint,
        ad_id bigint,
        click_timestamp timestamp,
        impression_timestamp timestamp
      ) TBLPROPERTIES ('format-version'='2');
name: iceberg