apache / apache/arrow-java

[Java] How do I read encrypted Parquet files using Arrow?

Ouverte
#207 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Type: usage
Langage dominant
Java
Étoiles
94
Forks
152
Merge moyen
3 j 16 h
PR mergées (30 j)
11

Description

### Describe the usage question you have. Please include as many useful details as possible.

I want to read encrypted Parquet files using Arrow Java API to create an input stream for [DuckDB](https://github.com/duckdb/duckdb).

It works for Parquet files as shown below.

```java
import org.apache.arrow.c.ArrowArrayStream;
import org.apache.arrow.c.Data;
import org.apache.arrow.dataset.file.FileFormat;
import org.apache.arrow.dataset.file.FileSystemDatasetFactory;
import org.apache.arrow.dataset.jni.NativeMemoryPool;
import org.apache.arrow.dataset.scanner.ScanOptions;
import org.apache.arrow.dataset.scanner.Scanner;
import org.apache.arrow.dataset.source.Dataset;
import org.apache.arrow.dataset.source.DatasetFactory;
import org.apache.arrow.memory.BufferAllocator;
import org.apache.arrow.memory.RootAllocator;
import org.apache.arrow.vector.ipc.ArrowReader;
import org.duckdb.DuckDBConnection;
import java.net.URI;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

URI uri = URI.create("file:/path/to/sample.parquet");

ScanOptions options = new ScanOptions(/*batchSize*/ 32768);
try (BufferAllocator allocator = new RootAllocator();
ArrowArrayStream stream = ArrowArrayStream.allocateNew(allocator);
DatasetFactory datasetFactory = new FileSystemDatasetFactory(allocator,
NativeMemoryPool.getDefault(), FileFormat.PARQUET, uri.toString());
Dataset dataset = datasetFactory.finish();
Scanner scanner = dataset.newScan(options);
ArrowReader reader = scanner.scanBatches();) {

Data.exportArrayStream(allocator, reader, stream);

Class.forName("org.duckdb.DuckDBDriver");
try (DuckDBConnection conn = (DuckDBConnection) DriverManager.getConnection("jdbc:duckdb:")) {
conn.registerArrowStream("testStream", stream);

try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM testStream")) {
// Do stuff with the resultset...
}
}
}
}
```

However, I haven't found how to do it for files encrypted using [Parquet modular encryption](https://github.com/apache/parquet-format/blob/master/Encryption.md). Arrow Python documentation shows some [examples](https://arrow.apache.org/docs/python/parquet.html#parquet-modular-encryption-columnar-encryption), but they don't exist for Java.

### Component(s)

Java

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par les points d’entrée Java indiqués—FileSystemDatasetFactory, FileFormat.PARQUET, Scanner et DuckDBConnection.registerArrowStream—et comparez-les avec la documentation liée sur le chiffrement modulaire de Parquet et les exemples Arrow Python. La tâche est considérée comme terminée lorsqu’une approche Java pour lire des données Parquet chiffrées dans le flux Arrow de DuckDB a été établie et documentée, ou qu’il est clairement indiqué que cette fonctionnalité n’est pas disponible.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
java
Domaine
databases
Type d'issue
Documentation
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.