This is an automated email from the ASF dual-hosted git repository.
etudenhoefner pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/main by this push:
new 71ff8a484d Docs: Enhance Spark pages (#9920)
71ff8a484d is described below
commit 71ff8a484dea72172d33d2133184af8d13481a0b
Author: Manu Zhang <[email protected]>
AuthorDate: Tue Mar 12 15:44:56 2024 +0800
Docs: Enhance Spark pages (#9920)
1. Fix internal links
2. Move `Type Compatibility` section from spark-writes.md to
spark-getting-started.md
---
docs/docs/spark-configuration.md | 2 +-
docs/docs/spark-ddl.md | 16 +++---
docs/docs/spark-getting-started.md | 90 +++++++++++++++++++++++++++------
docs/docs/spark-procedures.md | 8 +--
docs/docs/spark-queries.md | 4 +-
docs/docs/spark-structured-streaming.md | 10 ++--
docs/docs/spark-writes.md | 68 ++-----------------------
7 files changed, 99 insertions(+), 99 deletions(-)
diff --git a/docs/docs/spark-configuration.md b/docs/docs/spark-configuration.md
index e9382e701e..5e9c6e5d11 100644
--- a/docs/docs/spark-configuration.md
+++ b/docs/docs/spark-configuration.md
@@ -78,7 +78,7 @@ Both catalogs are configured using properties nested under
the catalog name. Com
| spark.sql.catalog._catalog-name_.table-default._propertyKey_ |
| Default Iceberg table property value for property key
_propertyKey_, which will be set on tables created by this catalog if not
overridden
|
| spark.sql.catalog._catalog-name_.table-override._propertyKey_ |
| Enforced Iceberg table property value for property key
_propertyKey_, which cannot be overridden by user
|
-Additional properties can be found in common [catalog
configuration](configuration.md#catalog-properties).
+Additional properties can be found in common [catalog
configuration](../configuration.md#catalog-properties).
### Using catalogs
diff --git a/docs/docs/spark-ddl.md b/docs/docs/spark-ddl.md
index ea85d5c991..e1376ddcf6 100644
--- a/docs/docs/spark-ddl.md
+++ b/docs/docs/spark-ddl.md
@@ -33,14 +33,14 @@ CREATE TABLE prod.db.sample (
USING iceberg;
```
-Iceberg will convert the column type in Spark to corresponding Iceberg type.
Please check the section of [type compatibility on creating
table](spark-writes.md#spark-type-to-iceberg-type) for details.
+Iceberg will convert the column type in Spark to corresponding Iceberg type.
Please check the section of [type compatibility on creating
table](../spark-getting-started.md#spark-type-to-iceberg-type) for details.
Table create commands, including CTAS and RTAS, support the full range of
Spark create clauses, including:
* `PARTITIONED BY (partition-expressions)` to configure partitioning
* `LOCATION '(fully-qualified-uri)'` to set the table location
* `COMMENT 'table documentation'` to set a table description
-* `TBLPROPERTIES ('key'='value', ...)` to set [table
configuration](configuration.md)
+* `TBLPROPERTIES ('key'='value', ...)` to set [table
configuration](../configuration.md)
Create commands may also set the default format with the `USING` clause. This
is only supported for `SparkCatalog` because Spark handles the `USING` clause
differently for the built-in catalog.
@@ -59,7 +59,7 @@ USING iceberg
PARTITIONED BY (category);
```
-The `PARTITIONED BY` clause supports transform expressions to create [hidden
partitions](partitioning.md).
+The `PARTITIONED BY` clause supports transform expressions to create [hidden
partitions](../partitioning.md).
```sql
CREATE TABLE prod.db.sample (
@@ -86,7 +86,7 @@ Note: Old syntax of `years(ts)`, `months(ts)`, `days(ts)` and
`hours(ts)` are al
## `CREATE TABLE ... AS SELECT`
-Iceberg supports CTAS as an atomic operation when using a
[`SparkCatalog`](spark-configuration.md#catalog-configuration). CTAS is
supported, but is not atomic when using
[`SparkSessionCatalog`](spark-configuration.md#replacing-the-session-catalog).
+Iceberg supports CTAS as an atomic operation when using a
[`SparkCatalog`](../spark-configuration.md#catalog-configuration). CTAS is
supported, but is not atomic when using
[`SparkSessionCatalog`](../spark-configuration.md#replacing-the-session-catalog).
```sql
CREATE TABLE prod.db.sample
@@ -106,7 +106,7 @@ AS SELECT ...
## `REPLACE TABLE ... AS SELECT`
-Iceberg supports RTAS as an atomic operation when using a
[`SparkCatalog`](spark-configuration.md#catalog-configuration). RTAS is
supported, but is not atomic when using
[`SparkSessionCatalog`](spark-configuration.md#replacing-the-session-catalog).
+Iceberg supports RTAS as an atomic operation when using a
[`SparkCatalog`](../spark-configuration.md#catalog-configuration). RTAS is
supported, but is not atomic when using
[`SparkSessionCatalog`](../spark-configuration.md#replacing-the-session-catalog).
Atomic table replacement creates a new snapshot with the results of the
`SELECT` query, but keeps table history.
@@ -168,7 +168,7 @@ Iceberg has full `ALTER TABLE` support in Spark 3,
including:
* Widening the type of `int`, `float`, and `decimal` fields
* Making required columns optional
-In addition, [SQL extensions](spark-configuration.md#sql-extensions) can be
used to add support for partition evolution and setting a table's write order
+In addition, [SQL extensions](../spark-configuration.md#sql-extensions) can be
used to add support for partition evolution and setting a table's write order
### `ALTER TABLE ... RENAME TO`
@@ -184,7 +184,7 @@ ALTER TABLE prod.db.sample SET TBLPROPERTIES (
);
```
-Iceberg uses table properties to control table behavior. For a list of
available properties, see [Table configuration](configuration.md).
+Iceberg uses table properties to control table behavior. For a list of
available properties, see [Table configuration](../configuration.md).
`UNSET` is used to remove properties:
@@ -325,7 +325,7 @@ ALTER TABLE prod.db.sample DROP COLUMN point.z;
## `ALTER TABLE` SQL extensions
-These commands are available in Spark 3 when using Iceberg [SQL
extensions](spark-configuration.md#sql-extensions).
+These commands are available in Spark 3 when using Iceberg [SQL
extensions](../spark-configuration.md#sql-extensions).
### `ALTER TABLE ... ADD PARTITION FIELD`
diff --git a/docs/docs/spark-getting-started.md
b/docs/docs/spark-getting-started.md
index d9dd70e4fa..72642cc6e1 100644
--- a/docs/docs/spark-getting-started.md
+++ b/docs/docs/spark-getting-started.md
@@ -40,7 +40,7 @@ spark-shell --packages
org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:{{ iceb
### Adding catalogs
-Iceberg comes with [catalogs](spark-configuration.md#catalogs) that enable SQL
commands to manage tables and load them by name. Catalogs are configured using
properties under `spark.sql.catalog.(catalog_name)`.
+Iceberg comes with [catalogs](../spark-configuration.md#catalogs) that enable
SQL commands to manage tables and load them by name. Catalogs are configured
using properties under `spark.sql.catalog.(catalog_name)`.
This command creates a path-based catalog named `local` for tables under
`$PWD/warehouse` and adds support for Iceberg tables to Spark's built-in
catalog:
@@ -56,7 +56,7 @@ spark-sql --packages
org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:{{ iceber
### Creating a table
-To create your first Iceberg table in Spark, use the `spark-sql` shell or
`spark.sql(...)` to run a [`CREATE TABLE`](spark-ddl.md#create-table) command:
+To create your first Iceberg table in Spark, use the `spark-sql` shell or
`spark.sql(...)` to run a [`CREATE TABLE`](../spark-ddl.md#create-table)
command:
```sql
-- local is the path-based catalog defined above
@@ -65,21 +65,21 @@ CREATE TABLE local.db.table (id bigint, data string) USING
iceberg;
Iceberg catalogs support the full range of SQL DDL commands, including:
-* [`CREATE TABLE ... PARTITIONED BY`](spark-ddl.md#create-table)
-* [`CREATE TABLE ... AS SELECT`](spark-ddl.md#create-table-as-select)
-* [`ALTER TABLE`](spark-ddl.md#alter-table)
-* [`DROP TABLE`](spark-ddl.md#drop-table)
+* [`CREATE TABLE ... PARTITIONED BY`](../spark-ddl.md#create-table)
+* [`CREATE TABLE ... AS SELECT`](../spark-ddl.md#create-table-as-select)
+* [`ALTER TABLE`](../spark-ddl.md#alter-table)
+* [`DROP TABLE`](../spark-ddl.md#drop-table)
### Writing
-Once your table is created, insert data using [`INSERT
INTO`](spark-writes.md#insert-into):
+Once your table is created, insert data using [`INSERT
INTO`](../spark-writes.md#insert-into):
```sql
INSERT INTO local.db.table VALUES (1, 'a'), (2, 'b'), (3, 'c');
INSERT INTO local.db.table SELECT id, data FROM source WHERE length(data) = 1;
```
-Iceberg also adds row-level SQL updates to Spark, [`MERGE
INTO`](spark-writes.md#merge-into) and [`DELETE
FROM`](spark-writes.md#delete-from):
+Iceberg also adds row-level SQL updates to Spark, [`MERGE
INTO`](../spark-writes.md#merge-into) and [`DELETE
FROM`](../spark-writes.md#delete-from):
```sql
MERGE INTO local.db.target t USING (SELECT * FROM updates) u ON t.id = u.id
@@ -87,7 +87,7 @@ WHEN MATCHED THEN UPDATE SET t.count = t.count + u.count
WHEN NOT MATCHED THEN INSERT *;
```
-Iceberg supports writing DataFrames using the new [v2 DataFrame write
API](spark-writes.md#writing-with-dataframes):
+Iceberg supports writing DataFrames using the new [v2 DataFrame write
API](../spark-writes.md#writing-with-dataframes):
```scala
spark.table("source").select("id", "data")
@@ -106,7 +106,7 @@ FROM local.db.table
GROUP BY data;
```
-SQL is also the recommended way to [inspect
tables](spark-queries.md#inspecting-tables). To view all snapshots in a table,
use the `snapshots` metadata table:
+SQL is also the recommended way to [inspect
tables](../spark-queries.md#inspecting-tables). To view all snapshots in a
table, use the `snapshots` metadata table:
```sql
SELECT * FROM local.db.table.snapshots;
```
@@ -121,18 +121,78 @@ SELECT * FROM local.db.table.snapshots;
+-------------------------+----------------+-----------+-----------+----------------------------------------------------+-----+
```
-[DataFrame reads](spark-queries.md#querying-with-dataframes) are supported and
can now reference tables by name using `spark.table`:
+[DataFrame reads](../spark-queries.md#querying-with-dataframes) are supported
and can now reference tables by name using `spark.table`:
```scala
val df = spark.table("local.db.table")
df.count()
```
+### Type compatibility
+
+Spark and Iceberg support different set of types. Iceberg does the type
conversion automatically, but not for all combinations,
+so you may want to understand the type conversion in Iceberg in prior to
design the types of columns in your tables.
+
+#### Spark type to Iceberg type
+
+This type conversion table describes how Spark types are converted to the
Iceberg types. The conversion applies on both creating Iceberg table and
writing to Iceberg table via Spark.
+
+| Spark | Iceberg | Notes |
+|-----------------|----------------------------|-------|
+| boolean | boolean | |
+| short | integer | |
+| byte | integer | |
+| integer | integer | |
+| long | long | |
+| float | float | |
+| double | double | |
+| date | date | |
+| timestamp | timestamp with timezone | |
+| timestamp_ntz | timestamp without timezone | |
+| char | string | |
+| varchar | string | |
+| string | string | |
+| binary | binary | |
+| decimal | decimal | |
+| struct | struct | |
+| array | list | |
+| map | map | |
+
+!!! info
+ The table is based on representing conversion during creating table. In
fact, broader supports are applied on write. Here're some points on write:
+
+ * Iceberg numeric types (`integer`, `long`, `float`, `double`, `decimal`)
support promotion during writes. e.g. You can write Spark types `short`,
`byte`, `integer`, `long` to Iceberg type `long`.
+ * You can write to Iceberg `fixed` type using Spark `binary` type. Note
that assertion on the length will be performed.
+
+#### Iceberg type to Spark type
+
+This type conversion table describes how Iceberg types are converted to the
Spark types. The conversion applies on reading from Iceberg table via Spark.
+
+| Iceberg | Spark | Note |
+|----------------------------|-------------------------|---------------|
+| boolean | boolean | |
+| integer | integer | |
+| long | long | |
+| float | float | |
+| double | double | |
+| date | date | |
+| time | | Not supported |
+| timestamp with timezone | timestamp | |
+| timestamp without timezone | timestamp_ntz | |
+| string | string | |
+| uuid | string | |
+| fixed | binary | |
+| binary | binary | |
+| decimal | decimal | |
+| struct | struct | |
+| list | array | |
+| map | map | |
+
### Next steps
Next, you can learn more about Iceberg tables in Spark:
-* [DDL commands](spark-ddl.md): `CREATE`, `ALTER`, and `DROP`
-* [Querying data](spark-queries.md): `SELECT` queries and metadata tables
-* [Writing data](spark-writes.md): `INSERT INTO` and `MERGE INTO`
-* [Maintaining tables](spark-procedures.md) with stored procedures
+* [DDL commands](../spark-ddl.md): `CREATE`, `ALTER`, and `DROP`
+* [Querying data](../spark-queries.md): `SELECT` queries and metadata tables
+* [Writing data](../spark-writes.md): `INSERT INTO` and `MERGE INTO`
+* [Maintaining tables](../spark-procedures.md) with stored procedures
diff --git a/docs/docs/spark-procedures.md b/docs/docs/spark-procedures.md
index 6b3cb06c3a..ee8a8466c7 100644
--- a/docs/docs/spark-procedures.md
+++ b/docs/docs/spark-procedures.md
@@ -20,7 +20,7 @@ title: "Procedures"
# Spark Procedures
-To use Iceberg in Spark, first configure [Spark
catalogs](spark-configuration.md). Stored procedures are only available when
using [Iceberg SQL extensions](spark-configuration.md#sql-extensions) in Spark
3.
+To use Iceberg in Spark, first configure [Spark
catalogs](../spark-configuration.md). Stored procedures are only available when
using [Iceberg SQL extensions](../spark-configuration.md#sql-extensions) in
Spark 3.
## Usage
@@ -272,7 +272,7 @@ the `expire_snapshots` procedure will never remove files
which are still require
| `stream_results` | | boolean | When true, deletion files will be
sent to Spark driver by RDD partition (by default, all the files will be sent
to Spark driver). This option is recommended to set to `true` to prevent Spark
driver OOM from large file size |
| `snapshot_ids` | | array of long | Array of snapshot IDs to expire. |
-If `older_than` and `retain_last` are omitted, the table's [expiration
properties](configuration.md#table-behavior-properties) will be used.
+If `older_than` and `retain_last` are omitted, the table's [expiration
properties](../configuration.md#table-behavior-properties) will be used.
Snapshots that are still referenced by branches or tags won't be removed. By
default, branches and tags never expire, but their retention policy can be
changed with the table property `history.expire.max-ref-age-ms`. The `main`
branch never expires.
#### Output
@@ -357,7 +357,7 @@ Iceberg can compact data files in parallel using Spark with
the `rewriteDataFile
| `partial-progress.max-commits` | 10 | Maximum amount of commits that this
rewrite is allowed to produce if partial progress is enabled |
| `use-starting-sequence-number` | true | Use the sequence number of the
snapshot at compaction start time instead of that of the newly produced
snapshot |
| `rewrite-job-order` | none | Force the rewrite job order based on the value.
<ul><li>If rewrite-job-order=bytes-asc, then rewrite the smallest job groups
first.</li><li>If rewrite-job-order=bytes-desc, then rewrite the largest job
groups first.</li><li>If rewrite-job-order=files-asc, then rewrite the job
groups with the least files first.</li><li>If rewrite-job-order=files-desc,
then rewrite the job groups with the most files first.</li><li>If
rewrite-job-order=none, then rewrite job g [...]
-| `target-file-size-bytes` | 536870912 (512 MB, default value of
`write.target-file-size-bytes` from [table
properties](configuration.md#write-properties)) | Target output file size |
+| `target-file-size-bytes` | 536870912 (512 MB, default value of
`write.target-file-size-bytes` from [table
properties](../configuration.md#write-properties)) | Target output file size |
| `min-file-size-bytes` | 75% of target file size | Files under this threshold
will be considered for rewriting regardless of any other criteria |
| `max-file-size-bytes` | 180% of target file size | Files with sizes above
this threshold will be considered for rewriting regardless of any other
criteria |
| `min-input-files` | 5 | Any file group exceeding this number of files will
be rewritten regardless of other criteria |
@@ -480,7 +480,7 @@ Dangling deletes are always filtered out during rewriting.
| `partial-progress.enabled` | false | Enable committing groups of files prior
to the entire rewrite completing |
| `partial-progress.max-commits` | 10 | Maximum amount of commits that this
rewrite is allowed to produce if partial progress is enabled |
| `rewrite-job-order` | none | Force the rewrite job order based on the value.
<ul><li>If rewrite-job-order=bytes-asc, then rewrite the smallest job groups
first.</li><li>If rewrite-job-order=bytes-desc, then rewrite the largest job
groups first.</li><li>If rewrite-job-order=files-asc, then rewrite the job
groups with the least files first.</li><li>If rewrite-job-order=files-desc,
then rewrite the job groups with the most files first.</li><li>If
rewrite-job-order=none, then rewrite job g [...]
-| `target-file-size-bytes` | 67108864 (64MB, default value of
`write.delete.target-file-size-bytes` from [table
properties](configuration.md#write-properties)) | Target output file size |
+| `target-file-size-bytes` | 67108864 (64MB, default value of
`write.delete.target-file-size-bytes` from [table
properties](../configuration.md#write-properties)) | Target output file size |
| `min-file-size-bytes` | 75% of target file size | Files under this threshold
will be considered for rewriting regardless of any other criteria |
| `max-file-size-bytes` | 180% of target file size | Files with sizes above
this threshold will be considered for rewriting regardless of any other
criteria |
| `min-input-files` | 5 | Any file group exceeding this number of files will
be rewritten regardless of other criteria |
diff --git a/docs/docs/spark-queries.md b/docs/docs/spark-queries.md
index 536c136d7e..092ed6b1d6 100644
--- a/docs/docs/spark-queries.md
+++ b/docs/docs/spark-queries.md
@@ -20,11 +20,11 @@ title: "Queries"
# Spark Queries
-To use Iceberg in Spark, first configure [Spark
catalogs](spark-configuration.md). Iceberg uses Apache Spark's DataSourceV2 API
for data source and catalog implementations.
+To use Iceberg in Spark, first configure [Spark
catalogs](../spark-configuration.md). Iceberg uses Apache Spark's DataSourceV2
API for data source and catalog implementations.
## Querying with SQL
-In Spark 3, tables use identifiers that include a [catalog
name](spark-configuration.md#using-catalogs).
+In Spark 3, tables use identifiers that include a [catalog
name](../spark-configuration.md#using-catalogs).
```sql
SELECT * FROM prod.db.table; -- catalog: prod, namespace: db, table: table
diff --git a/docs/docs/spark-structured-streaming.md
b/docs/docs/spark-structured-streaming.md
index 0ac753808d..5079904207 100644
--- a/docs/docs/spark-structured-streaming.md
+++ b/docs/docs/spark-structured-streaming.md
@@ -68,7 +68,7 @@ Iceberg supports `append` and `complete` output modes:
* `append`: appends the rows of every micro-batch to the table
* `complete`: replaces the table contents every micro-batch
-Prior to starting the streaming query, ensure you created the table. Refer to
the [SQL create table](spark-ddl.md#create-table) documentation to learn how to
create the Iceberg table.
+Prior to starting the streaming query, ensure you created the table. Refer to
the [SQL create table](../spark-ddl.md#create-table) documentation to learn how
to create the Iceberg table.
Iceberg doesn't support experimental [continuous
processing](https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#continuous-processing),
as it doesn't provide the interface to "commit" the output.
@@ -76,7 +76,7 @@ Iceberg doesn't support experimental [continuous
processing](https://spark.apach
Iceberg requires sorting data by partition per task prior to writing the data.
In Spark tasks are split by Spark partition.
against partitioned table. For batch queries you're encouraged to do explicit
sort to fulfill the requirement
-(see [here](spark-writes.md#writing-distribution-modes)), but the approach
would bring additional latency as
+(see [here](../spark-writes.md#writing-distribution-modes)), but the approach
would bring additional latency as
repartition and sort are considered as heavy operations for streaming
workload. To avoid additional latency, you can
enable fanout writer to eliminate the requirement.
@@ -107,13 +107,13 @@ documents how to configure the interval.
### Expire old snapshots
-Each batch written to a table produces a new snapshot. Iceberg tracks
snapshots in table metadata until they are expired. Snapshots accumulate
quickly with frequent commits, so it is highly recommended that tables written
by streaming queries are [regularly
maintained](maintenance.md#expire-snapshots). [Snapshot
expiration](spark-procedures.md#expire_snapshots) is the procedure of removing
the metadata and any data files that are no longer needed. By default, the
procedure will expire th [...]
+Each batch written to a table produces a new snapshot. Iceberg tracks
snapshots in table metadata until they are expired. Snapshots accumulate
quickly with frequent commits, so it is highly recommended that tables written
by streaming queries are [regularly
maintained](../maintenance.md#expire-snapshots). [Snapshot
expiration](../spark-procedures.md#expire_snapshots) is the procedure of
removing the metadata and any data files that are no longer needed. By default,
the procedure will exp [...]
### Compacting data files
-The amount of data written from a streaming process is typically small, which
can cause the table metadata to track lots of small files. [Compacting small
files into larger files](maintenance.md#compact-data-files) reduces the
metadata needed by the table, and increases query efficiency. Iceberg and Spark
[comes with the `rewrite_data_files`
procedure](spark-procedures.md#rewrite_data_files).
+The amount of data written from a streaming process is typically small, which
can cause the table metadata to track lots of small files. [Compacting small
files into larger files](../maintenance.md#compact-data-files) reduces the
metadata needed by the table, and increases query efficiency. Iceberg and Spark
[comes with the `rewrite_data_files`
procedure](../spark-procedures.md#rewrite_data_files).
### Rewrite manifests
To optimize write latency on a streaming workload, Iceberg can write the new
snapshot with a "fast" append that does not automatically compact manifests.
-This could lead lots of small manifest files. Iceberg can [rewrite the number
of manifest files to improve query
performance](maintenance.md#rewrite-manifests). Iceberg and Spark [come with
the `rewrite_manifests` procedure](spark-procedures.md#rewrite_manifests).
+This could lead lots of small manifest files. Iceberg can [rewrite the number
of manifest files to improve query
performance](../maintenance.md#rewrite-manifests). Iceberg and Spark [come with
the `rewrite_manifests` procedure](../spark-procedures.md#rewrite_manifests).
diff --git a/docs/docs/spark-writes.md b/docs/docs/spark-writes.md
index 1baea04dee..efc15e7e35 100644
--- a/docs/docs/spark-writes.md
+++ b/docs/docs/spark-writes.md
@@ -20,9 +20,9 @@ title: "Writes"
# Spark Writes
-To use Iceberg in Spark, first configure [Spark
catalogs](spark-configuration.md).
+To use Iceberg in Spark, first configure [Spark
catalogs](../spark-configuration.md).
-Some plans are only available when using [Iceberg SQL
extensions](spark-configuration.md#sql-extensions) in Spark 3.
+Some plans are only available when using [Iceberg SQL
extensions](../spark-configuration.md#sql-extensions) in Spark 3.
Iceberg uses Apache Spark's DataSourceV2 API for data source and catalog
implementations. Spark DSv2 is an evolving API with different levels of support
in Spark versions:
@@ -200,7 +200,7 @@ Branch writes can also be performed as part of a
write-audit-publish (WAP) workf
Note WAP branch and branch identifier cannot both be specified.
Also, the branch must exist before performing the write.
The operation does **not** create the branch if it does not exist.
-For more information on branches please refer to [branches](branching.md).
+For more information on branches please refer to [branches](../branching.md).
```sql
-- INSERT (1,' a') (2, 'b') into the audit branch.
@@ -385,7 +385,7 @@ sort-order. Further division and coalescing of tasks may
take place because of
When writing data to Iceberg with Spark, it's important to note that Spark
cannot write a file larger than a Spark
task and a file cannot span an Iceberg partition boundary. This means although
Iceberg will always roll over a file
-when it grows to
[`write.target-file-size-bytes`](configuration.md#write-properties), but unless
the Spark task is
+when it grows to
[`write.target-file-size-bytes`](../configuration.md#write-properties), but
unless the Spark task is
large enough that will not happen. The size of the file created on disk will
also be much smaller than the Spark task
since the on disk data will be both compressed and in columnar format as
opposed to Spark's uncompressed row
representation. This means a 100 megabyte Spark task will create a file much
smaller than 100 megabytes even if that
@@ -404,63 +404,3 @@ columnar-compressed size, so a larger value than the
target file size will need
in-memory size to on disk size is data dependent. Future work in Spark should
allow Iceberg to automatically adjust this
parameter at write time to match the `write.target-file-size-bytes`.
-## Type compatibility
-
-Spark and Iceberg support different set of types. Iceberg does the type
conversion automatically, but not for all combinations,
-so you may want to understand the type conversion in Iceberg in prior to
design the types of columns in your tables.
-
-### Spark type to Iceberg type
-
-This type conversion table describes how Spark types are converted to the
Iceberg types. The conversion applies on both creating Iceberg table and
writing to Iceberg table via Spark.
-
-| Spark | Iceberg | Notes |
-|-----------------|----------------------------|-------|
-| boolean | boolean | |
-| short | integer | |
-| byte | integer | |
-| integer | integer | |
-| long | long | |
-| float | float | |
-| double | double | |
-| date | date | |
-| timestamp | timestamp with timezone | |
-| timestamp_ntz | timestamp without timezone | |
-| char | string | |
-| varchar | string | |
-| string | string | |
-| binary | binary | |
-| decimal | decimal | |
-| struct | struct | |
-| array | list | |
-| map | map | |
-
-!!! info
- The table is based on representing conversion during creating table. In
fact, broader supports are applied on write. Here're some points on write:
-
- * Iceberg numeric types (`integer`, `long`, `float`, `double`, `decimal`)
support promotion during writes. e.g. You can write Spark types `short`,
`byte`, `integer`, `long` to Iceberg type `long`.
- * You can write to Iceberg `fixed` type using Spark `binary` type. Note
that assertion on the length will be performed.
-
-### Iceberg type to Spark type
-
-This type conversion table describes how Iceberg types are converted to the
Spark types. The conversion applies on reading from Iceberg table via Spark.
-
-| Iceberg | Spark | Note |
-|----------------------------|-------------------------|---------------|
-| boolean | boolean | |
-| integer | integer | |
-| long | long | |
-| float | float | |
-| double | double | |
-| date | date | |
-| time | | Not supported |
-| timestamp with timezone | timestamp | |
-| timestamp without timezone | timestamp_ntz | |
-| string | string | |
-| uuid | string | |
-| fixed | binary | |
-| binary | binary | |
-| decimal | decimal | |
-| struct | struct | |
-| list | array | |
-| map | map | |
-