Skip to content

Commit b174c45

Browse files
feat(catalog): Add catalog loader and builder implementation for rest catalog (#1580)
## Which issue does this PR close? - Part of #1260 - Closes #1255 ## What changes are included in this PR? * Some of the implementations are directly coming from the design in #1231 * Added a new crate `loader` for loading catalog based on type. * Implement the CatalogBuilder trait for rest catalog ## Are these changes tested? Yes, by unit tests --------- Co-authored-by: liurenjie1024 <liurenjie2008@gmail.com>
1 parent e3e4ed6 commit b174c45

File tree

20 files changed

+745
-111
lines changed

20 files changed

+745
-111
lines changed

crates/catalog/loader/Cargo.toml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Licensed to the Apache Software Foundation (ASF) under one
2+
# or more contributor license agreements. See the NOTICE file
3+
# distributed with this work for additional information
4+
# regarding copyright ownership. The ASF licenses this file
5+
# to you under the Apache License, Version 2.0 (the
6+
# "License"); you may not use this file except in compliance
7+
# with the License. You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing,
12+
# software distributed under the License is distributed on an
13+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
# KIND, either express or implied. See the License for the
15+
# specific language governing permissions and limitations
16+
# under the License.
17+
18+
[package]
19+
edition = { workspace = true }
20+
homepage = { workspace = true }
21+
name = "iceberg-catalog-loader"
22+
rust-version = { workspace = true }
23+
version = { workspace = true }
24+
25+
categories = ["database"]
26+
description = "Apache Iceberg Catalog Loader API"
27+
keywords = ["iceberg", "catalog"]
28+
license = { workspace = true }
29+
repository = { workspace = true }
30+
31+
[dependencies]
32+
iceberg = { workspace = true }
33+
iceberg-catalog-rest = {workspace = true}
34+
tokio = { workspace = true }
35+
async-trait = {workspace = true}
Lines changed: 338 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,338 @@
1+
crate 0BSD Apache-2.0 Apache-2.0 WITH LLVM-exception BSD-2-Clause BSD-3-Clause BSL-1.0 CC0-1.0 ISC MIT MPL-2.0 Unicode-3.0 Unlicense Zlib
2+
addr2line@0.24.2 X X
3+
adler2@2.0.0 X X X
4+
adler32@1.2.0 X
5+
ahash@0.8.11 X X
6+
aho-corasick@1.1.3 X X
7+
alloc-no-stdlib@2.0.4 X
8+
alloc-stdlib@0.2.2 X
9+
allocator-api2@0.2.21 X X
10+
android-tzdata@0.1.1 X X
11+
android_system_properties@0.1.5 X X
12+
anyhow@1.0.95 X X
13+
apache-avro@0.17.0 X
14+
array-init@2.1.0 X X
15+
arrayvec@0.7.6 X X
16+
arrow-arith@55.2.0 X
17+
arrow-array@55.2.0 X
18+
arrow-buffer@55.2.0 X
19+
arrow-cast@55.2.0 X
20+
arrow-data@55.2.0 X
21+
arrow-ipc@55.2.0 X
22+
arrow-ord@55.2.0 X
23+
arrow-schema@55.2.0 X
24+
arrow-select@55.2.0 X
25+
arrow-string@55.2.0 X
26+
as-any@0.3.2 X X
27+
async-lock@3.4.0 X X
28+
async-trait@0.1.88 X X
29+
atoi@2.0.0 X
30+
atomic-waker@1.1.2 X X
31+
autocfg@1.4.0 X X
32+
backon@1.5.1 X
33+
backtrace@0.3.74 X X
34+
base64@0.22.1 X X
35+
bigdecimal@0.4.8 X X
36+
bimap@0.6.3 X X
37+
bitflags@2.8.0 X X
38+
block-buffer@0.10.4 X X
39+
brotli@8.0.1 X X
40+
brotli-decompressor@5.0.0 X X
41+
bumpalo@3.17.0 X X
42+
bytemuck@1.21.0 X X X
43+
byteorder@1.5.0 X X
44+
bytes@1.10.0 X
45+
cc@1.2.14 X X
46+
cfg-if@1.0.0 X X
47+
chrono@0.4.41 X X
48+
concurrent-queue@2.5.0 X X
49+
const-oid@0.9.6 X X
50+
const-random@0.1.18 X X
51+
const-random-macro@0.1.16 X X
52+
core-foundation-sys@0.8.7 X X
53+
core2@0.4.0 X X
54+
cpufeatures@0.2.17 X X
55+
crc32c@0.6.8 X X
56+
crc32fast@1.4.2 X X
57+
crossbeam-channel@0.5.15 X X
58+
crossbeam-epoch@0.9.18 X X
59+
crossbeam-utils@0.8.21 X X
60+
crunchy@0.2.3 X
61+
crypto-common@0.1.6 X X
62+
darling@0.20.10 X
63+
darling_core@0.20.10 X
64+
darling_macro@0.20.10 X
65+
dary_heap@0.3.7 X X
66+
derive_builder@0.20.2 X X
67+
derive_builder_core@0.20.2 X X
68+
derive_builder_macro@0.20.2 X X
69+
digest@0.10.7 X X
70+
displaydoc@0.2.5 X X
71+
dissimilar@1.0.9 X
72+
either@1.15.0 X X
73+
equivalent@1.0.2 X X
74+
event-listener@5.4.0 X X
75+
event-listener-strategy@0.5.3 X X
76+
expect-test@1.5.1 X X
77+
fastrand@2.3.0 X X
78+
flatbuffers@25.2.10 X
79+
flate2@1.1.1 X X
80+
fnv@1.0.7 X X
81+
form_urlencoded@1.2.1 X X
82+
futures@0.3.31 X X
83+
futures-channel@0.3.31 X X
84+
futures-core@0.3.31 X X
85+
futures-executor@0.3.31 X X
86+
futures-io@0.3.31 X X
87+
futures-macro@0.3.31 X X
88+
futures-sink@0.3.31 X X
89+
futures-task@0.3.31 X X
90+
futures-util@0.3.31 X X
91+
generator@0.8.4 X X
92+
generic-array@0.14.7 X
93+
getrandom@0.2.15 X X
94+
getrandom@0.3.1 X X
95+
gimli@0.31.1 X X
96+
gloo-timers@0.3.0 X X
97+
h2@0.4.7 X
98+
half@2.6.0 X X
99+
hashbrown@0.14.5 X X
100+
hashbrown@0.15.2 X X
101+
heck@0.5.0 X X
102+
hermit-abi@0.3.9 X X
103+
hex@0.4.3 X X
104+
hmac@0.12.1 X X
105+
home@0.5.11 X X
106+
http@1.3.1 X X
107+
http-body@1.0.1 X
108+
http-body-util@0.1.2 X
109+
httparse@1.10.0 X X
110+
httpdate@1.0.3 X X
111+
hyper@1.6.0 X
112+
hyper-rustls@0.27.5 X X X
113+
hyper-util@0.1.10 X
114+
iana-time-zone@0.1.61 X X
115+
iana-time-zone-haiku@0.1.2 X X
116+
iceberg@0.6.0 X
117+
iceberg-catalog-loader@0.6.0 X
118+
iceberg-catalog-rest@0.6.0 X
119+
iceberg_test_utils@0.6.0 X
120+
icu_collections@1.5.0 X
121+
icu_locid@1.5.0 X
122+
icu_locid_transform@1.5.0 X
123+
icu_locid_transform_data@1.5.0 X
124+
icu_normalizer@1.5.0 X
125+
icu_normalizer_data@1.5.0 X
126+
icu_properties@1.5.1 X
127+
icu_properties_data@1.5.0 X
128+
icu_provider@1.5.0 X
129+
icu_provider_macros@1.5.0 X
130+
ident_case@1.0.1 X X
131+
idna@1.0.3 X X
132+
idna_adapter@1.2.0 X X
133+
indexmap@2.9.0 X X
134+
integer-encoding@3.0.4 X
135+
io-uring@0.7.8 X X
136+
ipnet@2.11.0 X X
137+
itertools@0.13.0 X X
138+
itoa@1.0.14 X X
139+
jobserver@0.1.32 X X
140+
js-sys@0.3.77 X X
141+
lazy_static@1.5.0 X X
142+
lexical-core@1.0.5 X X
143+
lexical-parse-float@1.0.5 X X
144+
lexical-parse-integer@1.0.5 X X
145+
lexical-util@1.0.6 X X
146+
lexical-write-float@1.0.5 X X
147+
lexical-write-integer@1.0.5 X X
148+
libc@0.2.174 X X
149+
libflate@2.1.0 X
150+
libflate_lz77@2.1.0 X
151+
libm@0.2.11 X X
152+
libz-rs-sys@0.5.0 X
153+
litemap@0.7.4 X
154+
lock_api@0.4.12 X X
155+
log@0.4.25 X X
156+
loom@0.7.2 X
157+
lz4_flex@0.11.3 X
158+
matchers@0.1.0 X
159+
md-5@0.10.6 X X
160+
memchr@2.7.4 X X
161+
mime@0.3.17 X X
162+
miniz_oxide@0.8.8 X X X
163+
mio@1.0.3 X
164+
moka@0.12.10 X X
165+
murmur3@0.5.2 X X
166+
nu-ansi-term@0.46.0 X
167+
num@0.4.3 X X
168+
num-bigint@0.4.6 X X
169+
num-complex@0.4.6 X X
170+
num-integer@0.1.46 X X
171+
num-iter@0.1.45 X X
172+
num-rational@0.4.2 X X
173+
num-traits@0.2.19 X X
174+
num_cpus@1.16.0 X X
175+
object@0.36.7 X X
176+
once_cell@1.21.1 X X
177+
opendal@0.54.0 X
178+
ordered-float@2.10.1 X
179+
ordered-float@4.6.0 X
180+
overload@0.1.1 X
181+
parking@2.2.1 X X
182+
parking_lot@0.12.3 X X
183+
parking_lot_core@0.9.10 X X
184+
parquet@55.2.0 X
185+
paste@1.0.15 X X
186+
percent-encoding@2.3.1 X X
187+
pin-project-lite@0.2.16 X X
188+
pin-utils@0.1.0 X X
189+
pkg-config@0.3.31 X X
190+
portable-atomic@1.10.0 X X
191+
ppv-lite86@0.2.20 X X
192+
proc-macro2@1.0.93 X X
193+
quad-rand@0.2.3 X
194+
quick-xml@0.37.4 X
195+
quote@1.0.40 X X
196+
rand@0.8.5 X X
197+
rand_chacha@0.3.1 X X
198+
rand_core@0.6.4 X X
199+
redox_syscall@0.5.8 X
200+
regex@1.11.1 X X
201+
regex-automata@0.1.10 X X
202+
regex-automata@0.4.9 X X
203+
regex-lite@0.1.6 X X
204+
regex-syntax@0.6.29 X X
205+
regex-syntax@0.8.5 X X
206+
reqsign@0.16.3 X
207+
reqwest@0.12.12 X X
208+
ring@0.17.13 X X
209+
rle-decode-fast@1.0.3 X X
210+
roaring@0.11.2 X X
211+
rust_decimal@1.37.1 X
212+
rustc-demangle@0.1.24 X X
213+
rustc_version@0.4.1 X X
214+
rustls@0.23.23 X X X
215+
rustls-pemfile@2.2.0 X X X
216+
rustls-pki-types@1.11.0 X X
217+
rustls-webpki@0.102.8 X
218+
rustversion@1.0.19 X X
219+
ryu@1.0.19 X X
220+
scoped-tls@1.0.1 X X
221+
scopeguard@1.2.0 X X
222+
semver@1.0.25 X X
223+
seq-macro@0.3.5 X X
224+
serde@1.0.217 X X
225+
serde_bytes@0.11.15 X X
226+
serde_derive@1.0.217 X X
227+
serde_json@1.0.138 X X
228+
serde_repr@0.1.19 X X
229+
serde_urlencoded@0.7.1 X X
230+
serde_with@3.14.0 X X
231+
serde_with_macros@3.14.0 X X
232+
sha1@0.10.6 X X
233+
sha2@0.10.8 X X
234+
sharded-slab@0.1.7 X
235+
shlex@1.3.0 X X
236+
simdutf8@0.1.5 X X
237+
slab@0.4.9 X
238+
smallvec@1.14.0 X X
239+
snap@1.1.1 X
240+
socket2@0.5.8 X X
241+
socket2@0.6.0 X X
242+
stable_deref_trait@1.2.0 X X
243+
static_assertions@1.1.0 X X
244+
strsim@0.11.1 X
245+
strum@0.26.3 X
246+
strum@0.27.1 X
247+
strum_macros@0.26.4 X
248+
strum_macros@0.27.1 X
249+
subtle@2.6.1 X
250+
syn@2.0.101 X X
251+
sync_wrapper@1.0.2 X
252+
synstructure@0.13.1 X
253+
tagptr@0.2.0 X X
254+
thiserror@1.0.69 X X
255+
thiserror-impl@1.0.69 X X
256+
thread_local@1.1.8 X X
257+
threadpool@1.8.1 X X
258+
thrift@0.17.0 X
259+
tiny-keccak@2.0.2 X
260+
tinystr@0.7.6 X
261+
tokio@1.47.0 X
262+
tokio-macros@2.5.0 X
263+
tokio-rustls@0.26.1 X X
264+
tokio-util@0.7.15 X
265+
tower@0.5.2 X
266+
tower-layer@0.3.3 X
267+
tower-service@0.3.3 X
268+
tracing@0.1.41 X
269+
tracing-attributes@0.1.28 X
270+
tracing-core@0.1.33 X
271+
tracing-log@0.2.0 X
272+
tracing-subscriber@0.3.19 X
273+
try-lock@0.2.5 X
274+
twox-hash@1.6.3 X
275+
twox-hash@2.1.0 X
276+
typed-builder@0.19.1 X X
277+
typed-builder@0.20.1 X X
278+
typed-builder-macro@0.19.1 X X
279+
typed-builder-macro@0.20.1 X X
280+
typenum@1.17.0 X X
281+
unicode-ident@1.0.16 X X X
282+
untrusted@0.9.0 X
283+
url@2.5.4 X X
284+
utf16_iter@1.0.5 X X
285+
utf8_iter@1.0.4 X X
286+
uuid@1.17.0 X X
287+
version_check@0.9.5 X X
288+
want@0.3.1 X
289+
wasi@0.11.0+wasi-snapshot-preview1 X X X
290+
wasi@0.13.3+wasi-0.2.2 X X X
291+
wasm-bindgen@0.2.100 X X
292+
wasm-bindgen-backend@0.2.100 X X
293+
wasm-bindgen-futures@0.4.50 X X
294+
wasm-bindgen-macro@0.2.100 X X
295+
wasm-bindgen-macro-support@0.2.100 X X
296+
wasm-bindgen-shared@0.2.100 X X
297+
wasm-streams@0.4.2 X X
298+
web-sys@0.3.77 X X
299+
webpki-roots@0.26.8 X
300+
winapi@0.3.9 X X
301+
winapi-i686-pc-windows-gnu@0.4.0 X X
302+
winapi-x86_64-pc-windows-gnu@0.4.0 X X
303+
windows@0.58.0 X X
304+
windows-core@0.52.0 X X
305+
windows-core@0.58.0 X X
306+
windows-implement@0.58.0 X X
307+
windows-interface@0.58.0 X X
308+
windows-link@0.1.1 X X
309+
windows-registry@0.2.0 X X
310+
windows-result@0.2.0 X X
311+
windows-strings@0.1.0 X X
312+
windows-sys@0.52.0 X X
313+
windows-sys@0.59.0 X X
314+
windows-targets@0.52.6 X X
315+
windows_aarch64_gnullvm@0.52.6 X X
316+
windows_aarch64_msvc@0.52.6 X X
317+
windows_i686_gnu@0.52.6 X X
318+
windows_i686_gnullvm@0.52.6 X X
319+
windows_i686_msvc@0.52.6 X X
320+
windows_x86_64_gnu@0.52.6 X X
321+
windows_x86_64_gnullvm@0.52.6 X X
322+
windows_x86_64_msvc@0.52.6 X X
323+
wit-bindgen-rt@0.33.0 X X X
324+
write16@1.0.0 X X
325+
writeable@0.5.5 X
326+
yoke@0.7.5 X
327+
yoke-derive@0.7.5 X
328+
zerocopy@0.7.35 X X X
329+
zerocopy-derive@0.7.35 X X X
330+
zerofrom@0.1.5 X
331+
zerofrom-derive@0.1.5 X
332+
zeroize@1.8.1 X X
333+
zerovec@0.10.4 X
334+
zerovec-derive@0.10.3 X
335+
zlib-rs@0.5.0 X
336+
zstd@0.13.2 X
337+
zstd-safe@7.2.1 X X
338+
zstd-sys@2.0.13+zstd.1.5.6 X X

0 commit comments

Comments
 (0)