You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CLAUDE.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,6 +15,7 @@ Enable -Pperformance-test to run performance tests.
15
15
Write plans which affect the system design, e.g. large new features or refactorings, as a Markdown file under _designs_ before implementing.
16
16
Mark designs as completed once done.
17
17
Update the status in the roadmap after implementing a feature.
18
+
Design documents describe the intended end state. Do not include references to the development process, alternative approaches that were considered and rejected, or commentary on how the design evolved. Write as if the reader has no context on the conversation that produced the document.
18
19
19
20
# Coding
20
21
@@ -27,6 +28,7 @@ Avoid fully-qualified class names within the code, always add imports.
27
28
Avoid object access and boxing as much as possible. Always prefer primitive access also if it means several similar methods.
28
29
Before writing new code, search for existing patterns in the same class/package that accomplish the same thing (e.g., the DRY principle). Extract repeated logic into helper methods within the same class rather than duplicating it. When a pattern appears multiple times, consider consolidating it into a single well-named method with overloads if needed.
29
30
Be conservative with base class refactoring. Do not pull implementation details up into abstract base classes unless the logic is truly identical across all subclasses with no foreseeable divergence. Shared helpers are better than shared template methods when subclasses may need different control flow.
The `hardwood-s3` module adds support for reading Parquet files directly from Amazon S3. Add it as a dependency alongside `hardwood-core`:
482
+
The `hardwood-s3` module adds support for reading Parquet files from Amazon S3 and S3-compatible services (Cloudflare R2, GCP Cloud Storage via HMAC keys, MinIO).
483
483
484
484
```xml
485
485
<dependency>
@@ -488,18 +488,21 @@ The `hardwood-s3` module adds support for reading Parquet files directly from Am
For the full AWS credential chain (env vars, `~/.aws/credentials`, EC2/ECS instance profile, SSO, web identity), add the optional `hardwood-aws-auth` module:
When a custom endpoint is set, region can be omitted. Use `.pathStyle(true)` for services that require path-style access (e.g. MinIO, SeaweedFS).
593
+
536
594
Column projection, row group filtering, and all other reader features work transparently with S3 files. Hardwood minimizes S3 requests by pre-fetching the file footer on open and coalescing column chunk reads within each row group.
537
595
538
596
### Reading into Avro GenericRecord
@@ -906,11 +964,25 @@ hardwood head -n 20 -f data.parquet
906
964
907
965
# Convert to CSV
908
966
hardwood convert --format csv -f data.parquet
967
+
```
968
+
969
+
### Reading Files from S3
970
+
971
+
All commands accept `s3://` URIs via the `-f` flag:
909
972
910
-
# Read from S3
973
+
```shell
911
974
hardwood schema -f s3://my-bucket/data.parquet
975
+
hardwood head -n 10 -f s3://my-bucket/data.parquet
912
976
```
913
977
978
+
The CLI resolves credentials via the standard AWS credential chain (environment variables, `~/.aws/credentials`, SSO, instance profiles, etc.).
979
+
980
+
| Environment Variable | Description |
981
+
|----------------------|-------------|
982
+
|`AWS_REGION`| AWS region (also read from `~/.aws/config` if not set) |
|`AWS_PATH_STYLE`| Set to `true` to use path-style access (required by some S3-compatible services) |
985
+
914
986
### Shell Completion
915
987
916
988
The distribution includes a Bash completion script at `bin/hardwood_completion`. Source it in your shell to enable tab completion for commands, options, and arguments:
@@ -935,7 +1007,8 @@ Hardwood is organized into public API packages and internal implementation packa
|`dev.hardwood.aws.auth`|**Public API**| Bridges the AWS SDK credential chain to Hardwood's `S3CredentialsProvider` (`hardwood-aws-auth` module, optional). |
939
1012
|`dev.hardwood.jfr`|**Public API**| JFR event types emitted during file reading, decoding, and pipeline operations. |
940
1013
|`dev.hardwood.internal.*`|**Internal**| Implementation details — not part of the public API and may change without notice. |
941
1014
@@ -1153,8 +1226,6 @@ The solution differs by codec:
1153
1226
1154
1227
`netty-buffer` (an optional dependency of `brotli4j`) is declared explicitly at compile scope so that GraalVM can resolve the `ByteBufUtil` reference in `brotli4j`'s `DirectDecompress` class during image analysis.
1155
1228
1156
-
Container builds use Mandrel's `--link-at-build-time`, which applies stricter type resolution: all reachable bytecode must have its full type hierarchy resolvable at build time. Netty's `Log4JLoggerFactory` references `org.apache.log4j.Logger` (provided by the `log4j-1.2-api` bridge artifact), which in turn references `org.apache.logging.log4j.core.LogEvent` from `log4j-core`. Both are therefore declared at compile scope in `cli/pom.xml` so that GraalVM can resolve the full chain during container builds.
0 commit comments