#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

spark.sql.extensions                   org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
spark.sql.catalog.rest                 org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.rest.type            rest
spark.sql.catalog.rest.uri             http://rest:8181
spark.sql.catalog.rest.io-impl         org.apache.iceberg.aws.s3.S3FileIO
spark.sql.catalog.rest.warehouse       s3://warehouse/rest/
spark.sql.catalog.rest.s3.endpoint     http://minio:9000
spark.sql.catalog.hive                 org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.hive.type            hive
spark.sql.catalog.hive.uri             http://hive:9083
spark.sql.catalog.hive.io-impl         org.apache.iceberg.aws.s3.S3FileIO
spark.sql.catalog.hive.warehouse       s3://warehouse/hive/
spark.sql.catalog.hive.s3.endpoint     http://minio:9000
spark.sql.defaultCatalog               rest
spark.eventLog.enabled                 true
spark.eventLog.dir                     /home/iceberg/spark-events
spark.history.fs.logDirectory          /home/iceberg/spark-events
spark.sql.catalogImplementation        in-memory
