diff --git a/docs/beam.md b/docs/beam.md
new file mode 100644
index 00000000..0009c2f3
--- /dev/null
+++ b/docs/beam.md
@@ -0,0 +1,3 @@
+# Beam
+
+https://beam.apache.org/documentation/programming-guide/#schema-definition
\ No newline at end of file
diff --git a/docs/mapping.md b/docs/mapping.md
index bafde4b6..2b3b9222 100644
--- a/docs/mapping.md
+++ b/docs/mapping.md
@@ -1,38 +1,38 @@
# Type Mapping
-| Scala | Avro | BigQuery | Bigtable7 | Datastore | Parquet | Protobuf | TensorFlow |
-|-----------------------------------|------------------------------|------------------------|---------------------------------|-----------------------|-----------------------------------|-------------------------|---------------------|
-| `Unit` | `null` | x | x | `Null` | x | x | x |
-| `Boolean` | `boolean` | `BOOL` | `Byte` | `Boolean` | `BOOLEAN` | `Boolean` | `INT64`3 |
-| `Char` | `int`3 | `INT64`3 | `Char` | `Integer`3 | `INT32`3 | `Int`3 | `INT64`3 |
-| `Byte` | `int`3 | `INT64`3 | `Byte` | `Integer`3 | `INT32`9 | `Int`3 | `INT64`3 |
-| `Short` | `int`3 | `INT64`3 | `Short` | `Integer`3 | `INT32`9 | `Int`3 | `INT64`3 |
-| `Int` | `int` | `INT64`3 | `Int` | `Integer`3 | `INT32`9 | `Int` | `INT64`3 |
-| `Long` | `long` | `INT64` | `Long` | `Integer` | `INT64`9 | `Long` | `INT64` |
-| `Float` | `float` | `FLOAT64`3 | `Float` | `Double`3 | `FLOAT` | `Float` | `FLOAT` |
-| `Double` | `double` | `FLOAT64` | `Double` | `Double` | `DOUBLE` | `Double` | `FLOAT`3 |
-| `CharSequence` | `string` | x | x | x | x | x | x |
-| `String` | `string` | `STRING` | `String` | `String` | `BINARY` | `String` | `BYTES`3 |
-| `Array[Byte]` | `bytes` | `BYTES` | `ByteString` | `Blob` | `BINARY` | `ByteString` | `BYTES` |
-| `ByteString` | x | x | `ByteString` | `Blob` | x | `ByteString` | `BYTES` |
-| `ByteBuffer` | `bytes` | x | x | | x | x | x |
-| Enum1 | `enum` | `STRING`3 | `String` | `String`3 | `BINARY`/`ENUM`9 | Enum | `BYTES`3 |
-| `BigInt` | x | x | `BigInt` | x | x | x | x |
-| `BigDecimal` | `bytes`4 | `NUMERIC`6 | `Int` scale + unscaled `BigInt` | x | `LOGICAL[DECIMAL]`9,14 | x | x |
-| `Option[T]` | `union[null, T]`5 | `NULLABLE` | Empty as `None` | Absent as `None` | `OPTIONAL` | `optional`10 | Size <= 1 |
-| `Iterable[T]`2 | `array[T]` | `REPEATED` | x | `Array` | `REPEATED`13 | `repeated` | Size >= 0 |
-| Nested | `record` | `STRUCT` | Flat8 | `Entity` | Group | `Message` | Flat8 |
-| `Map[K, V]` | `map[V]`15 | x | x | x | x | `map` | x |
-| `java.time.Instant` | `long`11 | `TIMESTAMP` | x | `Timestamp` | `LOGICAL[TIMESTAMP]`9 | x | x |
-| `java.time.LocalDateTime` | `long`11 | `DATETIME` | x | x | `LOGICAL[TIMESTAMP]`9 | x | x |
-| `java.time.OffsetTime` | x | x | x | x | `LOGICAL[TIME]`9 | x | x |
-| `java.time.LocalTime` | `long`11 | `TIME` | x | x | `LOGICAL[TIME]`9 | x | x |
-| `java.time.LocalDate` | `int`11 | `DATE` | x | x | `LOGICAL[DATE]`9 | x | x |
-| `org.joda.time.LocalDate` | `int`11 | x | x | x | x | x | x |
-| `org.joda.time.DateTime` | `int`11 | x | x | x | x | x | x |
-| `org.joda.time.LocalTime` | `int`11 | x | x | x | x | x | x |
-| `java.util.UUID` | `string`4 | x | ByteString (16 bytes) | x | `FIXED[16]` | x | x |
-| `(Long, Long, Long)`12 | `fixed[12]` | x | x | x | x | x | x |
+| Scala | Avro | Beam | BigQuery | Bigtable7 | Datastore | Parquet | Protobuf | TensorFlow |
+|-----------------------------------|------------------------------|----------------------------------|------------------------|---------------------------------|-----------------------|-----------------------------------|-------------------------|---------------------|
+| `Unit` | `null` | x | x | x | `Null` | x | x | x |
+| `Boolean` | `boolean` | `BOOLEAN` | `BOOL` | `Byte` | `Boolean` | `BOOLEAN` | `Boolean` | `INT64`3 |
+| `Char` | `int`3 | `BYTE` | `INT64`3 | `Char` | `Integer`3 | `INT32`3 | `Int`3 | `INT64`3 |
+| `Byte` | `int`3 | `BYTE` | `INT64`3 | `Byte` | `Integer`3 | `INT32`9 | `Int`3 | `INT64`3 |
+| `Short` | `int`3 | `INT16` | `INT64`3 | `Short` | `Integer`3 | `INT32`9 | `Int`3 | `INT64`3 |
+| `Int` | `int` | `INT32` | `INT64`3 | `Int` | `Integer`3 | `INT32`9 | `Int` | `INT64`3 |
+| `Long` | `long` | `INT64` | `INT64` | `Long` | `Integer` | `INT64`9 | `Long` | `INT64` |
+| `Float` | `float` | `FLOAT` | `FLOAT64`3 | `Float` | `Double`3 | `FLOAT` | `Float` | `FLOAT` |
+| `Double` | `double` | `DOUBLE` | `FLOAT64` | `Double` | `Double` | `DOUBLE` | `Double` | `FLOAT`3 |
+| `CharSequence` | `string` | `STRING` | x | x | x | x | x | x |
+| `String` | `string` | `STRING` | `STRING` | `String` | `String` | `BINARY` | `String` | `BYTES`3 |
+| `Array[Byte]` | `bytes` | `BYTES` | `BYTES` | `ByteString` | `Blob` | `BINARY` | `ByteString` | `BYTES` |
+| `ByteString` | x | `BYTES` | x | `ByteString` | `Blob` | x | `ByteString` | `BYTES` |
+| `ByteBuffer` | `bytes` | `BYTES` | x | x | | x | x | x |
+| Enum1 | `enum` | `STRING`16 | `STRING`3 | `String` | `String`3 | `BINARY`/`ENUM`9 | Enum | `BYTES`3 |
+| `BigInt` | x | x | x | `BigInt` | x | x | x | x |
+| `BigDecimal` | `bytes`4 | `DECIMAL` | `NUMERIC`6 | `Int` scale + unscaled `BigInt` | x | `LOGICAL[DECIMAL]`9,14 | x | x |
+| `Option[T]` | `union[null, T]`5 | Empty as `null` | `NULLABLE` | Empty as `None` | Absent as `None` | `OPTIONAL` | `optional`10 | Size <= 1 |
+| `Iterable[T]`2 | `array[T]` | `ITERABLE` | `REPEATED` | x | `Array` | `REPEATED`13 | `repeated` | Size >= 0 |
+| Nested | `record` | `ROW` | `STRUCT` | Flat8 | `Entity` | Group | `Message` | Flat8 |
+| `Map[K, V]` | `map[V]`15 | `MAP` | x | x | x | x | `map` | x |
+| `java.time.Instant` | `long`11 | `INT64` | `TIMESTAMP` | x | `Timestamp` | `LOGICAL[TIMESTAMP]`9 | x | x |
+| `java.time.LocalDateTime` | `long`11 | `INT64` | `DATETIME` | x | x | `LOGICAL[TIMESTAMP]`9 | x | x |
+| `java.time.OffsetTime` | x | x | x | x | x | `LOGICAL[TIME]`9 | x | x |
+| `java.time.LocalTime` | `long`11 | `INT32` | `TIME` | x | x | `LOGICAL[TIME]`9 | x | x |
+| `java.time.LocalDate` | `int`11 | `INT64`17 | `DATE` | x | x | `LOGICAL[DATE]`9 | x | x |
+| `org.joda.time.LocalDate` | `int`11 | `INT32` | x | x | x | x | x | x |
+| `org.joda.time.DateTime` | `int`11 | `INT64` | x | x | x | x | x | x |
+| `org.joda.time.LocalTime` | `int`11 | `INT32` | x | x | x | x | x | x |
+| `java.util.UUID` | `string`4 | `ROW(INT64, INT64)`18 | x | ByteString (16 bytes) | x | `FIXED[16]` | x | x |
+| `(Long, Long, Long)`12 | `fixed[12]` | x | x | x | x | x | x | x |
1. Those wrapped in`UnsafeEnum` are encoded as strings,
see [enums.md](https://github.com/spotify/magnolify/blob/master/docs/enums.md) for more
@@ -58,4 +58,7 @@
format: `required group $FIELDNAME (LIST) { repeated $FIELDTYPE array ($FIELDSCHEMA); }`.
14. Parquet's Decimal logical format supports multiple representations, and are not implicitly scoped by default. Import
one of: `magnolify.parquet.ParquetField.{decimal32, decimal64, decimalFixed, decimalBinary}`.
-15. Map key type in avro is fixed to string. Scala Map key type must be either `String` or `CharSequence`.
\ No newline at end of file
+15. Map key type in avro is fixed to string. Scala Map key type must be either `String` or `CharSequence`.
+16. Beam logical [Enumeration type](https://beam.apache.org/documentation/programming-guide/#enumerationtype)
+17. Beam logical [Date type](https://beam.apache.org/releases/javadoc/2.58.1/org/apache/beam/sdk/schemas/logicaltypes/Date.html)
+18. Beam logical [UUID type](https://beam.apache.org/releases/javadoc/2.58.1/org/apache/beam/sdk/schemas/logicaltypes/UuidLogicalType.html)