danielcweeks commented on code in PR #603:
URL: https://github.com/apache/parquet-format/pull/603#discussion_r3729889552


##########
LogicalTypes.md:
##########
@@ -756,10 +756,52 @@ A self-reference points within the same Parquet file 
using `offset` and `size` (
 required). A self-reference is when `uri` is not set. A file containing 
self-references
 can be renamed or relocated as a single unit.
 
-Parquet files containing self-references must not use Parquet modular 
encryption.
-Self-referenced byte ranges are not Parquet encryption modules and therefore 
cannot
-be encrypted or authenticated independently. Encryption of external files 
referenced
-by `uri` is outside the scope of the Parquet format.
+A schema that permits self-references must include the `inline` field.
+
+Each self-reference inherits the compression and encryption settings of the 
`inline`
+column chunk of the same row group. These settings are properties of the 
column chunk,
+so all self-references of a column chunk share them regardless of the page a 
value is
+stored in.
+
+Each referenced byte range is compressed independently using the 
`CompressionCodec`
+of the `inline` column chunk. `UNCOMPRESSED` leaves the referenced bytes 
uncompressed.
+
+Each compressed byte range is an independent compression block. Compression 
state is
+not shared with the data page or with other referenced ranges.
+
+For an unencrypted self-reference, `offset` and `size` identify either the 
independent
+compressed block or the uncompressed bytes. For a compressed block, the 
complete range
+is supplied to the codec, and its decompressed output is the resolved value.
+
+The decompressed size of a self-reference is not stored. Readers must rely on 
the
+framing of the codec where it provides one, or decompress into a dynamically 
sized
+buffer. A future revision of this specification may add an explicit 
decompressed size.
+
+The encryption state and key are inherited from the `inline` column chunk. If 
the
+column chunk is encrypted, each self-reference is encrypted independently 
using the
+same column key and file encryption algorithm. Compression is applied before
+encryption. If the column chunk is not encrypted, its self-references are not
+encrypted. An encrypted self-reference is limited to 2 GiB by the length field 
of the
+encrypted module; a value too large to store this way must use an external 
reference
+(`uri`). An encrypted stored representation is bound to a single column chunk 
and must
+not be shared between column chunks. See
+[Parquet Modular Encryption](Encryption.md) for the encryption layout and AAD
+construction.
+
+A self-reference identifies a stored representation, not necessarily the 
resolved
+bytes. Consumers must use a Parquet reader to resolve a self-reference; copying

Review Comment:
   > Consumers must use a Parquet reader to resolve a self-reference
   
   I think this is an unnecessary __MUST__ statement.  I think it's fine to 
just say: "copying `[offset, offset + size)` directly may return compressed or 
encrypted data".
   
   The intent is to describe what needs to be done to correctly interpret the 
bytes, not enforce who does it.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to