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: README.md
+27-1Lines changed: 27 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -40,6 +40,8 @@ The package can be installed by typing in the following in a Julia REPL:
40
40
julia>using Pkg; Pkg.add("Arrow")
41
41
```
42
42
43
+
Arrow.jl currently requires Julia `1.12+`.
44
+
43
45
## Local Development
44
46
45
47
When developing on Arrow.jl it is recommended that you run the following to ensure that any
@@ -49,6 +51,12 @@ changes to ArrowTypes.jl are immediately available to Arrow.jl without requiring
49
51
julia --project -e 'using Pkg; Pkg.develop(path="src/ArrowTypes")'
50
52
```
51
53
54
+
Current write-path notes:
55
+
*`Arrow.tobuffer` includes a direct single-partition fast path for eligible inputs
56
+
*`Arrow.tobuffer(Tables.partitioner(...))` also includes a targeted direct multi-record-batch path for single-column top-level strings and single-column non-missing binary/code-units columns
57
+
*`Arrow.write(io, Tables.partitioner(...))` now reuses that same targeted direct multi-record-batch path instead of always going through the legacy `Writer` orchestration
58
+
* multi-column partitions, dictionary-encoded top-level columns, map-heavy inputs, and missing-binary partitions retain the existing writer path
59
+
52
60
## Format Support
53
61
54
62
This implementation supports the 1.0 version of the specification, including support for:
@@ -60,9 +68,27 @@ This implementation supports the 1.0 version of the specification, including sup
60
68
61
69
It currently doesn't include support for:
62
70
* Tensors or sparse tensors
63
-
* Flight RPC
64
71
* C data interface
65
72
73
+
Flight RPC status:
74
+
* Experimental `Arrow.Flight` support is available in-tree
75
+
* Requires Julia `1.12+`
76
+
* Includes generated protocol bindings and complete client constructors for the `FlightService` RPC surface
77
+
* Keeps the top-level Flight module shell thin, with exports and generated-protocol setup split out of `src/flight/Flight.jl`
78
+
* Includes high-level `FlightData <-> Arrow IPC` helpers for `Arrow.Table`, `Arrow.Stream`, and DoPut payload generation
79
+
* Keeps the Flight IPC conversion layer modular under `src/flight/convert/`, with `src/flight/convert.jl` retained as a thin entrypoint
80
+
* Includes client helpers for request headers, binary metadata, handshake token reuse, and TLS configuration via `withheaders`, `withtoken`, and `authenticate`
81
+
* Keeps the Flight client implementation modular under `src/flight/client/`, with thin entrypoints at `src/flight/client.jl` and `src/flight/client/rpc_methods.jl`
82
+
* Includes a transport-agnostic server core (`Service`, `ServerCallContext`, `ServiceDescriptor`, `MethodDescriptor`) for local Flight method dispatch, path lookup, and handler testing
83
+
* Keeps the transport-agnostic server core modular under `src/flight/server/`, with `src/flight/server.jl` retained as a thin entrypoint
84
+
* Includes an optional `gRPCServer.jl` package extension that maps `Arrow.Flight.Service` into `gRPCServer.ServiceDescriptor` and registers Flight proto types with the external server package when it is present
85
+
* Keeps the optional `gRPCServer.jl` bridge modular under `ext/arrowgrpcserverext/`, with `ext/ArrowgRPCServerExt.jl` retained as a thin entrypoint
86
+
* Includes optional live interoperability coverage for `Handshake`, authenticated token propagation, `PollFlightInfo`, and TLS via dedicated Python reference servers
87
+
* Includes optional live `pyarrow.flight` interoperability coverage for `ListFlights`, `GetFlightInfo`, `GetSchema`, `DoGet`, `DoPut`, `DoExchange`, `ListActions`, and `DoAction`
88
+
* Keeps targeted Flight verification modular under `test/flight/`, with `test/flight.jl` retained as a thin entrypoint for local and CI invocation stability, the client-constructor/protocol-wrapper checks decomposed under `test/flight/client_surface/`, the optional `gRPCServer` extension scenarios decomposed under `test/flight/grpcserver_extension/`, the `pyarrow.flight` interop scenarios decomposed under `test/flight/pyarrow_interop/`, and the transport-agnostic server-core checks decomposed under `test/flight/server_core/`
89
+
* Includes `test/flight_grpcserver.jl` as a temporary-environment runner for optional native `gRPCServer` coverage without mutating `test/Project.toml`
90
+
* Dedicated CI jobs now exercise the Flight interop suite on stable and nightly Linux; native Julia server transport remains optional/experimental and is not part of the default Flight suite
91
+
66
92
Third-party data formats:
67
93
* CSV, parquet and avro support via the existing [CSV.jl](https://github.com/JuliaData/CSV.jl), [Parquet.jl](https://github.com/JuliaIO/Parquet.jl) and [Avro.jl](https://github.com/JuliaData/Avro.jl) packages
Copy file name to clipboardExpand all lines: docs/src/manual.md
+10Lines changed: 10 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -97,10 +97,20 @@ One note on performance: when writing `TimeZones.ZonedDateTime` columns to the a
97
97
as the column has `ZonedDateTime` elements that all share a common timezone. This ensures the writing process can know "upfront" which timezone will be encoded and is thus much more
98
98
efficient and performant.
99
99
100
+
Similarly, `ArrowTypes.ToArrow` avoids repeated type-promotion work for
101
+
homogeneous custom columns even when `ArrowTypes.ArrowType(T)` is abstract, so
102
+
write-time conversion does not pay unnecessary overhead once the serialized
103
+
element type is stable.
104
+
100
105
#### Custom types
101
106
102
107
To support writing your custom Julia struct, Arrow.jl utilizes the format's mechanism for "extension types" by allowing the storing of Julia type name and metadata in the field metadata. To "hook in" to this machinery, custom types can utilize the interface methods defined in the `Arrow.ArrowTypes` submodule. For example:
103
108
109
+
Arrow.jl already uses this mechanism for several Base logical types, including
110
+
`nothing`, `Tuple`, `VersionNumber`, and `Complex`, so those values roundtrip as
111
+
their original Julia types instead of falling back to plain struct-shaped
0 commit comments