@knockdata/objectexplorer 0.4.7 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/app/assets/WorkerParser.js +146 -126
  2. package/app/assets/index.css +1 -1
  3. package/app/assets/index.js +473 -110
  4. package/app/assets/is.js +1 -1
  5. package/app/assets/lightgbmc.wasm +0 -0
  6. package/app/assets/search-worker.js +1 -1
  7. package/demo/agent.db +0 -0
  8. package/demo/climate-classic.nc +0 -0
  9. package/demo/climate.h5 +0 -0
  10. package/demo/climate.nc +0 -0
  11. package/demo/delta/README.md +89 -0
  12. package/demo/delta/checkpoint/_delta_log/00000000000000000000.json +4 -0
  13. package/demo/delta/checkpoint/_delta_log/00000000000000000001.json +2 -0
  14. package/demo/delta/checkpoint/_delta_log/00000000000000000002.json +2 -0
  15. package/demo/delta/checkpoint/_delta_log/00000000000000000003.json +2 -0
  16. package/demo/delta/checkpoint/_delta_log/00000000000000000004.json +2 -0
  17. package/demo/delta/checkpoint/_delta_log/00000000000000000005.json +2 -0
  18. package/demo/delta/checkpoint/_delta_log/00000000000000000006.json +2 -0
  19. package/demo/delta/checkpoint/_delta_log/00000000000000000007.checkpoint.parquet +0 -0
  20. package/demo/delta/checkpoint/_delta_log/00000000000000000007.json +2 -0
  21. package/demo/delta/checkpoint/_delta_log/_last_checkpoint +1 -0
  22. package/demo/delta/checkpoint/part-00000-0b6af41d-e5a8-4636-bbb9-933386f1e95e-c000.snappy.parquet +0 -0
  23. package/demo/delta/checkpoint/part-00000-371ba9d3-7e90-4786-b364-0f32602fb3eb-c000.snappy.parquet +0 -0
  24. package/demo/delta/checkpoint/part-00000-400e799c-ee2c-4382-95bd-c0d2e78582f4-c000.snappy.parquet +0 -0
  25. package/demo/delta/checkpoint/part-00000-49faa527-fda9-47d4-bff7-7ebe782cba09-c000.snappy.parquet +0 -0
  26. package/demo/delta/checkpoint/part-00000-7dd28ad4-da00-4d40-9b12-148c7de6ec1f-c000.snappy.parquet +0 -0
  27. package/demo/delta/checkpoint/part-00000-c340b163-272e-4791-8b89-c8f9ab9ac2c6-c000.snappy.parquet +0 -0
  28. package/demo/delta/checkpoint/part-00000-d9a43e09-e3fb-408c-b14b-19043435ea0c-c000.snappy.parquet +0 -0
  29. package/demo/delta/checkpoint/part-00000-f0d26828-6932-41a4-a807-e2bc4ef0b1fa-c000.snappy.parquet +0 -0
  30. package/demo/delta/mapped/_delta_log/00000000000000000000.json +3 -0
  31. package/demo/delta/mapped/part-00000-mapped.parquet +0 -0
  32. package/demo/delta/partition/_delta_log/00000000000000000000.json +6 -0
  33. package/demo/delta/partition/_delta_log/00000000000000000001.json +3 -0
  34. package/demo/delta/partition/region=east/part-00000-967adb21-c6cc-4a66-b438-080e1d082e23-c000.snappy.parquet +0 -0
  35. package/demo/delta/partition/region=north/part-00000-23d9cdb9-7dfd-4ff2-9b4a-16a908b0d2a7-c000.zstd.parquet +0 -0
  36. package/demo/delta/partition/region=north/part-00000-37b07708-d258-40eb-ae1a-1e9888944793-c000.snappy.parquet +0 -0
  37. package/demo/delta/partition/region=south/part-00000-ca593487-a99f-4806-9104-73be2fa14dd7-c000.snappy.parquet +0 -0
  38. package/demo/delta/sales/_delta_log/00000000000000000000.json +4 -0
  39. package/demo/delta/sales/_delta_log/00000000000000000001.json +3 -0
  40. package/demo/delta/sales/_delta_log/00000000000000000002.json +3 -0
  41. package/demo/delta/sales/part-00000-05185265-6ab9-46d7-ba8a-4468426d0732-c000.snappy.parquet +0 -0
  42. package/demo/delta/sales/part-00000-327fad08-9437-4709-b8c8-378c6e02770c-c000.zstd.parquet +0 -0
  43. package/demo/delta/sales/part-00000-409fe61a-75ba-4adf-b6cb-346cfeccdd5e-c000.snappy.parquet +0 -0
  44. package/demo/delta/vector/_delta_log/00000000000000000000.json +4 -0
  45. package/demo/delta/vector/_delta_log/00000000000000000001.json +3 -0
  46. package/demo/delta/vector/_delta_log/00000000000000000002.json +2 -0
  47. package/demo/delta/vector/deletion_vector_00000000-0000-4000-8000-0000000000d7.bin +0 -0
  48. package/demo/delta/vector/part-00000-8e0b0895-990f-4e24-bf8f-89e44621b789-c000.zstd.parquet +0 -0
  49. package/demo/delta/vector/part-00000-ca79def4-5fb3-4549-b03d-4e2fea31b64e-c000.snappy.parquet +0 -0
  50. package/demo/hudi/README.md +92 -0
  51. package/demo/hudi/inflight/b1a2c3d4-0000-4000-8000-00000000e301-0_0-1-0_20260817120000000.parquet +0 -0
  52. package/demo/hudi/inflight/b1a2c3d4-0000-4000-8000-00000000e301-0_0-1-0_20260817120100000.parquet +0 -0
  53. package/demo/hudi/mor/b1a2c3d4-0000-4000-8000-00000000e401-0_0-1-0_20260817120000000.parquet +0 -0
  54. package/demo/hudi/partition/region=east/b1a2c3d4-0000-4000-8000-00000000e103-0_0-1-0_20260817120000000.parquet +0 -0
  55. package/demo/hudi/partition/region=north/b1a2c3d4-0000-4000-8000-00000000e101-0_0-1-0_20260817120000000.parquet +0 -0
  56. package/demo/hudi/partition/region=north/b1a2c3d4-0000-4000-8000-00000000e101-0_0-1-0_20260817120100000.parquet +0 -0
  57. package/demo/hudi/partition/region=south/b1a2c3d4-0000-4000-8000-00000000e102-0_0-1-0_20260817120000000.parquet +0 -0
  58. package/demo/hudi/replace/b1a2c3d4-0000-4000-8000-00000000e201-0_0-1-0_20260817120000000.parquet +0 -0
  59. package/demo/hudi/replace/b1a2c3d4-0000-4000-8000-00000000e202-0_0-1-0_20260817120100000.parquet +0 -0
  60. package/demo/hudi/sales/b1a2c3d4-0000-4000-8000-00000000e001-0_0-1-0_20260817120000000.parquet +0 -0
  61. package/demo/hudi/sales/b1a2c3d4-0000-4000-8000-00000000e001-0_0-1-0_20260817120100000.parquet +0 -0
  62. package/demo/hudi/sales/b1a2c3d4-0000-4000-8000-00000000e001-0_0-1-0_20260817120200000.parquet +0 -0
  63. package/demo/iceberg/README.md +80 -0
  64. package/demo/iceberg/equality/data/00000-0-6762229c-bca3-4c19-8088-f5e8fd37939e.parquet +0 -0
  65. package/demo/iceberg/equality/data/equality-delete.parquet +0 -0
  66. package/demo/iceberg/equality/metadata/00000-3898835a-27a8-4802-9fd8-25bf74eb05e9.metadata.json +1 -0
  67. package/demo/iceberg/equality/metadata/00001-bff789d6-a3b8-40b0-adf6-ab42edc90384.metadata.json +1 -0
  68. package/demo/iceberg/equality/metadata/00002-delete.metadata.json +115 -0
  69. package/demo/iceberg/equality/metadata/6762229c-bca3-4c19-8088-f5e8fd37939e-m0.avro +0 -0
  70. package/demo/iceberg/equality/metadata/delete-6727406315757390782-m0.avro +0 -0
  71. package/demo/iceberg/equality/metadata/snap-6727406315757390781-0-6762229c-bca3-4c19-8088-f5e8fd37939e.avro +0 -0
  72. package/demo/iceberg/equality/metadata/snap-6727406315757390782-0-delete.avro +0 -0
  73. package/demo/iceberg/evolved/data/00000-0-257f0a82-aa89-49ca-ab08-2e15d7a6ce61.parquet +0 -0
  74. package/demo/iceberg/evolved/data/00000-0-f612a2cc-fd42-4fe7-8f30-849c886ed42f.parquet +0 -0
  75. package/demo/iceberg/evolved/metadata/00000-7b1ee4a6-d23e-4597-a952-1faeae2c6631.metadata.json +1 -0
  76. package/demo/iceberg/evolved/metadata/00001-f82a6028-170f-4c99-9f69-dc9c5db7706f.metadata.json +1 -0
  77. package/demo/iceberg/evolved/metadata/00002-5751d450-f81a-453c-b1c1-7c0ecb3b847a.metadata.json +1 -0
  78. package/demo/iceberg/evolved/metadata/00003-b392ee5d-33c3-4c03-9448-941481157646.metadata.json +1 -0
  79. package/demo/iceberg/evolved/metadata/257f0a82-aa89-49ca-ab08-2e15d7a6ce61-m0.avro +0 -0
  80. package/demo/iceberg/evolved/metadata/f612a2cc-fd42-4fe7-8f30-849c886ed42f-m0.avro +0 -0
  81. package/demo/iceberg/evolved/metadata/snap-1074794464454607928-0-f612a2cc-fd42-4fe7-8f30-849c886ed42f.avro +0 -0
  82. package/demo/iceberg/evolved/metadata/snap-4829795160162008264-0-257f0a82-aa89-49ca-ab08-2e15d7a6ce61.avro +0 -0
  83. package/demo/iceberg/hadoop/data/00000-0-01fd755b-8ea2-4aed-9a21-07e07fcf34bc.parquet +0 -0
  84. package/demo/iceberg/hadoop/metadata/01fd755b-8ea2-4aed-9a21-07e07fcf34bc-m0.avro +0 -0
  85. package/demo/iceberg/hadoop/metadata/snap-1143458465259875935-0-01fd755b-8ea2-4aed-9a21-07e07fcf34bc.avro +0 -0
  86. package/demo/iceberg/hadoop/metadata/v1.metadata.json +1 -0
  87. package/demo/iceberg/hadoop/metadata/version-hint.text +1 -0
  88. package/demo/iceberg/partition/data/region_part=east/00000-2-2d48a1ff-55ba-4bae-9c6b-8732d8323bd7.parquet +0 -0
  89. package/demo/iceberg/partition/data/region_part=north/00000-0-2d48a1ff-55ba-4bae-9c6b-8732d8323bd7.parquet +0 -0
  90. package/demo/iceberg/partition/data/region_part=south/00000-1-2d48a1ff-55ba-4bae-9c6b-8732d8323bd7.parquet +0 -0
  91. package/demo/iceberg/partition/metadata/00000-cde33df7-2164-4f3a-ac15-10aab9c841ac.metadata.json +1 -0
  92. package/demo/iceberg/partition/metadata/00001-49f1d5a2-0111-4c83-b71c-6a84ffc1eeb4.metadata.json +1 -0
  93. package/demo/iceberg/partition/metadata/00002-455a595a-b069-4002-b1f6-bd89611f483c.metadata.json +1 -0
  94. package/demo/iceberg/partition/metadata/2d48a1ff-55ba-4bae-9c6b-8732d8323bd7-m0.avro +0 -0
  95. package/demo/iceberg/partition/metadata/snap-5440112098897409547-0-2d48a1ff-55ba-4bae-9c6b-8732d8323bd7.avro +0 -0
  96. package/demo/iceberg/position/data/00000-0-8d1a982c-c1b7-47d9-a584-de646ada36b6.parquet +0 -0
  97. package/demo/iceberg/position/data/position-delete.parquet +0 -0
  98. package/demo/iceberg/position/metadata/00000-0c9f7b09-cbc3-4933-b0a8-01d8a809916e.metadata.json +1 -0
  99. package/demo/iceberg/position/metadata/00001-8fc1224a-057c-4848-9c74-9c4e592c3545.metadata.json +1 -0
  100. package/demo/iceberg/position/metadata/00002-delete.metadata.json +115 -0
  101. package/demo/iceberg/position/metadata/8d1a982c-c1b7-47d9-a584-de646ada36b6-m0.avro +0 -0
  102. package/demo/iceberg/position/metadata/delete-8554796374254190465-m0.avro +0 -0
  103. package/demo/iceberg/position/metadata/snap-8554796374254190464-0-8d1a982c-c1b7-47d9-a584-de646ada36b6.avro +0 -0
  104. package/demo/iceberg/position/metadata/snap-8554796374254190465-0-delete.avro +0 -0
  105. package/demo/iceberg/sales/data/00000-0-16494fa7-6997-413a-83c6-bfc6d53f3da5.parquet +0 -0
  106. package/demo/iceberg/sales/data/00000-0-c22c4051-1631-419a-a3dd-a4869ef05b86.parquet +0 -0
  107. package/demo/iceberg/sales/metadata/00000-82dd52ff-dd85-4033-b71a-c16358a1926e.metadata.json +1 -0
  108. package/demo/iceberg/sales/metadata/00001-357f9784-8695-4b85-8f06-fd34b1785c06.metadata.json +1 -0
  109. package/demo/iceberg/sales/metadata/00002-8f9af95b-ee34-4114-a3b8-39e98282ea32.metadata.json +1 -0
  110. package/demo/iceberg/sales/metadata/16494fa7-6997-413a-83c6-bfc6d53f3da5-m0.avro +0 -0
  111. package/demo/iceberg/sales/metadata/c22c4051-1631-419a-a3dd-a4869ef05b86-m0.avro +0 -0
  112. package/demo/iceberg/sales/metadata/c22c4051-1631-419a-a3dd-a4869ef05b86-m1.avro +0 -0
  113. package/demo/iceberg/sales/metadata/snap-1906855036599627199-0-c22c4051-1631-419a-a3dd-a4869ef05b86.avro +0 -0
  114. package/demo/iceberg/sales/metadata/snap-7501977550537779287-0-16494fa7-6997-413a-83c6-bfc6d53f3da5.avro +0 -0
  115. package/demo/iceberg/vector/data/00000-0-9197c8ae-ba1a-4385-9ea5-0c6678edc498.parquet +0 -0
  116. package/demo/iceberg/vector/data/deletion-vector.puffin +0 -0
  117. package/demo/iceberg/vector/metadata/00000-10309d54-e9b9-4ca0-a876-a1a04af25990.metadata.json +64 -0
  118. package/demo/iceberg/vector/metadata/00001-11587d2c-50b6-4300-9319-79fc00683da5.metadata.json +100 -0
  119. package/demo/iceberg/vector/metadata/00002-delete.metadata.json +115 -0
  120. package/demo/iceberg/vector/metadata/9197c8ae-ba1a-4385-9ea5-0c6678edc498-m0.avro +0 -0
  121. package/demo/iceberg/vector/metadata/delete-1190645659349152089-m0.avro +0 -0
  122. package/demo/iceberg/vector/metadata/snap-1190645659349152088-0-9197c8ae-ba1a-4385-9ea5-0c6678edc498.avro +0 -0
  123. package/demo/iceberg/vector/metadata/snap-1190645659349152089-0-delete.avro +0 -0
  124. package/demo/nl_train_stations.arrow +0 -0
  125. package/demo/nl_train_stations.avro +0 -0
  126. package/demo/nl_train_stations.orc +0 -0
  127. package/demo/sample.duckdb +0 -0
  128. package/demo/test.csv +7 -0
  129. package/demo/test.json +6 -0
  130. package/demo/test.orc +0 -0
  131. package/demo/wide.csv +3 -0
  132. package/package.json +1 -1
  133. package/server/WebServer.mjs +276 -263
@@ -0,0 +1,92 @@
1
+ # Hudi reference tables
2
+
3
+ Five Apache Hudi tables, each one holding a single thing a reader has to get right. They exist
4
+ because `server/src/duckdb` reads Hudi itself, and these are what say it reads it correctly.
5
+
6
+ ```
7
+ hudi/
8
+ sales insert, modify, delete — the file group is rewritten by every commit
9
+ partition a file group per partition, and a commit that touches only one of them
10
+ replace a replacecommit, which retires whole file groups at once
11
+ inflight a commit that never completed, whose parquet is on disk anyway
12
+ mor merge on read: a base file, and log files holding everything since
13
+ ```
14
+
15
+ Regenerate with `uv run objectexplorer/reference/data/generate-hudi.py`. Instant times and file ids
16
+ are constants rather than fresh uuids, so regenerating changes nothing and
17
+ `server/test/hudi-golden.json` stays valid.
18
+
19
+ ## The names are the metadata
20
+
21
+ Delta keeps a log and Iceberg keeps a chain. Hudi writes most of the answer into the file names:
22
+
23
+ ```
24
+ sales/
25
+ .hoodie/
26
+ 20260817120000000.commit insert
27
+ 20260817120100000.commit modify
28
+ 20260817120200000.commit delete
29
+ hoodie.properties the table's type, key and version
30
+ b1a2…e001-0_0-1-0_20260817120000000.parquet 4 rows, written by the first commit
31
+ b1a2…e001-0_0-1-0_20260817120100000.parquet 4 rows, written by the second
32
+ b1a2…e001-0_0-1-0_20260817120200000.parquet 2 rows, written by the third — live
33
+ ```
34
+
35
+ A base file is `<fileId>_<writeToken>_<instant>.parquet`. Every file with the same file id is one
36
+ **file group** — the same rows rewritten — and the newest instant among them is the one the table
37
+ is made of. The other two are older versions of it, sitting right there, which is why:
38
+
39
+ ```sql
40
+ SELECT * FROM 'hudi/sales'; -- 2 rows, the table
41
+ SELECT * FROM 'hudi/sales/*.parquet'; -- 10 rows, three versions stacked
42
+ ```
43
+
44
+ Ten is 4 + 4 + 2. The `id = 2` row appears three times at two amounts, and the deleted `north` rows
45
+ come back. Nothing in the parquet files says which of them is current.
46
+
47
+ That first query has no function around the path on purpose. `server/src/duckdb/sql-expand.js` sees
48
+ a `.hoodie` in the folder and rewrites the query into the `read_parquet` it should have been.
49
+
50
+ `.hoodie` is what says which instants finished, and that is not decoration. `inflight` holds a write
51
+ that died: its parquet is on disk, its name looks like every other base file's, and only the
52
+ missing `20260817120100000.commit` says those four rows are not in the table.
53
+
54
+ ## Merge on read
55
+
56
+ `mor` is the other half of Hudi. A change does not rewrite the base file — it is appended to a log
57
+ file beside it, in Hudi's own block format, and the rows the table has are the base file merged with
58
+ everything the logs said afterwards:
59
+
60
+ | block | instant | what it says |
61
+ |-----------------|-------------------|--------------------------------------------------|
62
+ | avro data | 20260817120100000 | `id = 2` now costs 95 |
63
+ | delete | 20260817120200000 | `id = 3` is gone |
64
+ | parquet data | 20260817120300000 | `id = 4` now costs 999 |
65
+ | avro data | 20260817120400000 | `id = 5` exists |
66
+ | command | 20260817120500000 | ...no it does not: rolls back 20260817120400000 |
67
+
68
+ Three rows come out of four on disk. A reader that only read the base file would answer with the
69
+ row that was deleted, the two rows that were changed, and none of what the logs added — and a
70
+ reader that read the blocks without honouring the rollback would invent a fifth row that no writer
71
+ ever committed.
72
+
73
+ The blocks are read by `server/src/duckdb/hudi-log.js`. An avro data block holds raw records with
74
+ the schema up in the block header, so it is wrapped back into the Avro container file it came out
75
+ of and duckdb reads it (`hudi-avro.js`) — the same move the Iceberg reader makes for a manifest.
76
+
77
+ ## Written by hand
78
+
79
+ Hudi writes with Spark and there is no JVM here, so the generator writes the bytes itself. What
80
+ makes that trustworthy is hudi-rs, the reader behind the `hudi` package on PyPI: it opens every one
81
+ of these and its row counts are what the generator prints.
82
+
83
+ It gets through four of the five. hudi-rs 0.4.0 opens `HoodieDeleteRecord.avsc` from disk at run
84
+ time and its wheel ships without it, so `mor` is the one it declines — the same way `deltalake`
85
+ declines the Delta deletion vector fixture. The blocks either side of that delete are hudi-rs's own
86
+ answer, the delete block is written the way its source parses one, and `server/test/hudi.test.js`
87
+ reads all of it back.
88
+
89
+ Two small liberties, neither of which any reader can see: a rolled-back instant would also leave a
90
+ `.rollback` file in `.hoodie`, which is Avro rather than json and says nothing the command block in
91
+ the log does not; and there is no `.hoodie/metadata` table, which is an index of the listing a
92
+ reader can do for itself.
@@ -0,0 +1,80 @@
1
+ # Iceberg reference tables
2
+
3
+ Seven Iceberg tables, each one holding a single thing a reader has to get right. They exist because
4
+ `server/src/duckdb` reads Iceberg itself now, and these are what say it reads it correctly.
5
+
6
+ ```
7
+ iceberg/
8
+ sales an append, then a delete that rewrote the file it touched
9
+ partition identity partitioning, so a manifest carries the partition value
10
+ evolved a renamed column and an added one, so the files disagree about their schema
11
+ hadoop v1.metadata.json + version-hint.text, the layout with no catalog behind it
12
+ position merge-on-read position deletes
13
+ equality merge-on-read equality deletes
14
+ vector a v3 deletion vector, in a Puffin file
15
+ ```
16
+
17
+ Regenerate with `uv run objectexplorer/reference/data/generate-iceberg.py`. UUIDs and snapshot ids
18
+ change every time; shapes do not.
19
+
20
+ ## The chain
21
+
22
+ Delta keeps a log. Iceberg keeps a chain, and a reader has to walk all of it:
23
+
24
+ ```
25
+ metadata/v1.metadata.json the schema, the partition specs, and every snapshot
26
+ └── snapshot the current one, named by current-snapshot-id
27
+ └── snap-<id>-….avro the manifest list: which manifests this snapshot is made of
28
+ └── <uuid>-m0.avro a manifest: which data files, and which delete files
29
+ └── data/….parquet the rows
30
+ ```
31
+
32
+ Nothing in `data/` says which snapshot it belongs to, so — exactly as with Delta — a wildcard over
33
+ `data/*.parquet` answers with every version of the table at once:
34
+
35
+ ```sql
36
+ SELECT * FROM 'iceberg/sales'; -- 2 rows, the table
37
+ SELECT * FROM 'iceberg/sales/*.parquet'; -- 6 rows, both snapshots stacked
38
+ ```
39
+
40
+ The first query has no function around the path on purpose. `server/src/duckdb/sql-expand.js` sees a
41
+ folder with a `metadata/` in it, walks the chain, and rewrites the query. There is no
42
+ `iceberg_scan()` any more, and no iceberg extension in the engine either.
43
+
44
+ ## Three ways to delete a row
45
+
46
+ Iceberg can delete a row without rewriting the file it is in — *merge on read* — and it has three
47
+ spellings for it, which is why three of these fixtures exist.
48
+
49
+ | fixture | how the delete is recorded | what a reader must do |
50
+ |------------|--------------------------------------------|--------------------------------------------|
51
+ | `sales` | the file is rewritten without the row | nothing; just read the current files |
52
+ | `position` | a parquet of `(file_path, pos)` | drop those row numbers of that file |
53
+ | `equality` | a parquet of values, e.g. `id` | drop rows matching those values |
54
+ | `vector` | a roaring bitmap inside a Puffin file | decode it, drop those row numbers |
55
+
56
+ Which deletes apply to which data file is decided by sequence number, and the two rules differ by
57
+ one character — a difference that is not cosmetic:
58
+
59
+ - a **position** delete applies when `data.sequence_number <= delete.sequence_number`, so a delete
60
+ written in the same commit as its data file *does* apply;
61
+ - an **equality** delete applies when `data.sequence_number < delete.sequence_number`, so one
62
+ written in that same commit does *not*.
63
+
64
+ `position`, `equality` and `vector` are written by hand, because pyiceberg only ever rewrites whole
65
+ files. The manifests are real Avro written with `fastavro` (reusing the schema pyiceberg wrote), the
66
+ Puffin blob is built to the layout `delta-kernel-rs`'s Iceberg counterpart reads, and each one was
67
+ only trusted once duckdb's iceberg extension read it and agreed.
68
+
69
+ ## Two things that bite
70
+
71
+ **Absolute paths.** Iceberg writes fully-qualified paths into its metadata and manifests, so a table
72
+ copied anywhere — another bucket, another machine, a git checkout — names files that are not there.
73
+ The generator rewrites them to wherever the fixture landed, and the reader resolves every recorded
74
+ path against the folder it was handed anyway. duckdb-iceberg calls this `allow_moved_paths`; for a
75
+ file browser it is not optional.
76
+
77
+ **Snapshot ids are int64.** They are routinely larger than `2^53`, so `JSON.parse` rounds them and
78
+ two snapshots can collide into one number. `position` and `vector` have snapshots exactly one apart
79
+ for precisely this reason — before the reader quoted those ids, it picked the older snapshot and
80
+ quietly returned the undeleted rows.
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/equality","table-uuid":"98a7b63e-3fff-42e4-9244-27f8e01b8e55","last-updated-ms":1786970727979,"last-column-id":4,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":0}
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/equality","table-uuid":"98a7b63e-3fff-42e4-9244-27f8e01b8e55","last-updated-ms":1786970727982,"last-column-id":4,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":6727406315757390781,"snapshots":[{"snapshot-id":6727406315757390781,"sequence-number":1,"timestamp-ms":1786970727982,"manifest-list":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/equality/metadata/snap-6727406315757390781-0-6762229c-bca3-4c19-8088-f5e8fd37939e.avro","summary":{"operation":"append","added-files-size":"1716","added-data-files":"1","added-records":"4","total-data-files":"1","total-delete-files":"0","total-records":"4","total-files-size":"1716","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":6727406315757390781,"timestamp-ms":1786970727982}],"metadata-log":[{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/equality/metadata/00000-3898835a-27a8-4802-9fd8-25bf74eb05e9.metadata.json","timestamp-ms":1786970727979}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":6727406315757390781,"type":"branch"}},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":1}
@@ -0,0 +1,115 @@
1
+ {
2
+ "location": "file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/equality",
3
+ "table-uuid": "98a7b63e-3fff-42e4-9244-27f8e01b8e55",
4
+ "last-updated-ms": 1786970727982,
5
+ "last-column-id": 4,
6
+ "schemas": [
7
+ {
8
+ "type": "struct",
9
+ "fields": [
10
+ {
11
+ "id": 1,
12
+ "name": "id",
13
+ "type": "long",
14
+ "required": false
15
+ },
16
+ {
17
+ "id": 2,
18
+ "name": "region",
19
+ "type": "string",
20
+ "required": false
21
+ },
22
+ {
23
+ "id": 3,
24
+ "name": "product",
25
+ "type": "string",
26
+ "required": false
27
+ },
28
+ {
29
+ "id": 4,
30
+ "name": "amount",
31
+ "type": "double",
32
+ "required": false
33
+ }
34
+ ],
35
+ "schema-id": 0,
36
+ "identifier-field-ids": []
37
+ }
38
+ ],
39
+ "current-schema-id": 0,
40
+ "partition-specs": [
41
+ {
42
+ "spec-id": 0,
43
+ "fields": []
44
+ }
45
+ ],
46
+ "default-spec-id": 0,
47
+ "last-partition-id": 999,
48
+ "properties": {},
49
+ "current-snapshot-id": 6727406315757390782,
50
+ "snapshots": [
51
+ {
52
+ "snapshot-id": 6727406315757390781,
53
+ "sequence-number": 1,
54
+ "timestamp-ms": 1786970727982,
55
+ "manifest-list": "file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/equality/metadata/snap-6727406315757390781-0-6762229c-bca3-4c19-8088-f5e8fd37939e.avro",
56
+ "summary": {
57
+ "operation": "append",
58
+ "added-files-size": "1716",
59
+ "added-data-files": "1",
60
+ "added-records": "4",
61
+ "total-data-files": "1",
62
+ "total-delete-files": "0",
63
+ "total-records": "4",
64
+ "total-files-size": "1716",
65
+ "total-position-deletes": "0",
66
+ "total-equality-deletes": "0"
67
+ },
68
+ "schema-id": 0
69
+ },
70
+ {
71
+ "snapshot-id": 6727406315757390782,
72
+ "parent-snapshot-id": 6727406315757390781,
73
+ "sequence-number": 2,
74
+ "timestamp-ms": 1786970728982,
75
+ "manifest-list": "file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/equality/metadata/snap-6727406315757390782-0-delete.avro",
76
+ "summary": {
77
+ "operation": "delete"
78
+ },
79
+ "schema-id": 0
80
+ }
81
+ ],
82
+ "snapshot-log": [
83
+ {
84
+ "snapshot-id": 6727406315757390781,
85
+ "timestamp-ms": 1786970727982
86
+ },
87
+ {
88
+ "snapshot-id": 6727406315757390782,
89
+ "timestamp-ms": 1786970728982
90
+ }
91
+ ],
92
+ "metadata-log": [
93
+ {
94
+ "metadata-file": "file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/equality/metadata/00000-3898835a-27a8-4802-9fd8-25bf74eb05e9.metadata.json",
95
+ "timestamp-ms": 1786970727979
96
+ }
97
+ ],
98
+ "sort-orders": [
99
+ {
100
+ "order-id": 0,
101
+ "fields": []
102
+ }
103
+ ],
104
+ "default-sort-order-id": 0,
105
+ "refs": {
106
+ "main": {
107
+ "snapshot-id": 6727406315757390781,
108
+ "type": "branch"
109
+ }
110
+ },
111
+ "statistics": [],
112
+ "partition-statistics": [],
113
+ "format-version": 2,
114
+ "last-sequence-number": 2
115
+ }
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved","table-uuid":"e8bd35bb-21a6-4cbe-9d12-c3313b48a1f7","last-updated-ms":1786970727942,"last-column-id":4,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":0}
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved","table-uuid":"e8bd35bb-21a6-4cbe-9d12-c3313b48a1f7","last-updated-ms":1786970727945,"last-column-id":4,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1074794464454607928,"snapshots":[{"snapshot-id":1074794464454607928,"sequence-number":1,"timestamp-ms":1786970727945,"manifest-list":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved/metadata/snap-1074794464454607928-0-f612a2cc-fd42-4fe7-8f30-849c886ed42f.avro","summary":{"operation":"append","added-files-size":"1716","added-data-files":"1","added-records":"4","total-data-files":"1","total-delete-files":"0","total-records":"4","total-files-size":"1716","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1074794464454607928,"timestamp-ms":1786970727945}],"metadata-log":[{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved/metadata/00000-7b1ee4a6-d23e-4597-a952-1faeae2c6631.metadata.json","timestamp-ms":1786970727942}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1074794464454607928,"type":"branch"}},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":1}
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved","table-uuid":"e8bd35bb-21a6-4cbe-9d12-c3313b48a1f7","last-updated-ms":1786970727948,"last-column-id":5,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]},{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"total","type":"double","required":false},{"id":5,"name":"currency","type":"string","required":false}],"schema-id":1,"identifier-field-ids":[]}],"current-schema-id":1,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1074794464454607928,"snapshots":[{"snapshot-id":1074794464454607928,"sequence-number":1,"timestamp-ms":1786970727945,"manifest-list":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved/metadata/snap-1074794464454607928-0-f612a2cc-fd42-4fe7-8f30-849c886ed42f.avro","summary":{"operation":"append","added-files-size":"1716","added-data-files":"1","added-records":"4","total-data-files":"1","total-delete-files":"0","total-records":"4","total-files-size":"1716","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1074794464454607928,"timestamp-ms":1786970727945}],"metadata-log":[{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved/metadata/00000-7b1ee4a6-d23e-4597-a952-1faeae2c6631.metadata.json","timestamp-ms":1786970727942},{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved/metadata/00001-f82a6028-170f-4c99-9f69-dc9c5db7706f.metadata.json","timestamp-ms":1786970727945}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1074794464454607928,"type":"branch"}},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":1}
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved","table-uuid":"e8bd35bb-21a6-4cbe-9d12-c3313b48a1f7","last-updated-ms":1786970727951,"last-column-id":5,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]},{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"total","type":"double","required":false},{"id":5,"name":"currency","type":"string","required":false}],"schema-id":1,"identifier-field-ids":[]}],"current-schema-id":1,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":4829795160162008264,"snapshots":[{"snapshot-id":1074794464454607928,"sequence-number":1,"timestamp-ms":1786970727945,"manifest-list":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved/metadata/snap-1074794464454607928-0-f612a2cc-fd42-4fe7-8f30-849c886ed42f.avro","summary":{"operation":"append","added-files-size":"1716","added-data-files":"1","added-records":"4","total-data-files":"1","total-delete-files":"0","total-records":"4","total-files-size":"1716","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0},{"snapshot-id":4829795160162008264,"parent-snapshot-id":1074794464454607928,"sequence-number":2,"timestamp-ms":1786970727951,"manifest-list":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved/metadata/snap-4829795160162008264-0-257f0a82-aa89-49ca-ab08-2e15d7a6ce61.avro","summary":{"operation":"append","added-files-size":"1961","added-data-files":"1","added-records":"1","total-data-files":"2","total-delete-files":"0","total-records":"5","total-files-size":"3677","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":1}],"snapshot-log":[{"snapshot-id":1074794464454607928,"timestamp-ms":1786970727945},{"snapshot-id":4829795160162008264,"timestamp-ms":1786970727951}],"metadata-log":[{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved/metadata/00000-7b1ee4a6-d23e-4597-a952-1faeae2c6631.metadata.json","timestamp-ms":1786970727942},{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved/metadata/00001-f82a6028-170f-4c99-9f69-dc9c5db7706f.metadata.json","timestamp-ms":1786970727945},{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/evolved/metadata/00002-5751d450-f81a-453c-b1c1-7c0ecb3b847a.metadata.json","timestamp-ms":1786970727948}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":4829795160162008264,"type":"branch"}},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":2}
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/hadoop","table-uuid":"5286ed49-1d5b-4399-9cc1-12959a24df75","last-updated-ms":1786970727961,"last-column-id":4,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":1143458465259875935,"snapshots":[{"snapshot-id":1143458465259875935,"sequence-number":1,"timestamp-ms":1786970727961,"manifest-list":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/hadoop/metadata/snap-1143458465259875935-0-01fd755b-8ea2-4aed-9a21-07e07fcf34bc.avro","summary":{"operation":"append","added-files-size":"1716","added-data-files":"1","added-records":"4","total-data-files":"1","total-delete-files":"0","total-records":"4","total-files-size":"1716","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":1143458465259875935,"timestamp-ms":1786970727961}],"metadata-log":[{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/hadoop/metadata/00000-5f9520ae-7bee-483f-8ff2-9f40a0fcbcc3.metadata.json","timestamp-ms":1786970727958}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":1143458465259875935,"type":"branch"}},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":1}
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/partition","table-uuid":"4ac926be-c3af-4ec5-87a7-bd63348d769c","last-updated-ms":1786970727927,"last-column-id":4,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":0}
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/partition","table-uuid":"4ac926be-c3af-4ec5-87a7-bd63348d769c","last-updated-ms":1786970727929,"last-column-id":4,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]},{"spec-id":1,"fields":[{"source-id":2,"field-id":1000,"transform":"identity","name":"region_part"}]}],"default-spec-id":1,"last-partition-id":1000,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/partition/metadata/00000-cde33df7-2164-4f3a-ac15-10aab9c841ac.metadata.json","timestamp-ms":1786970727927}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":0}
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/partition","table-uuid":"4ac926be-c3af-4ec5-87a7-bd63348d769c","last-updated-ms":1786970727936,"last-column-id":4,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]},{"spec-id":1,"fields":[{"source-id":2,"field-id":1000,"transform":"identity","name":"region_part"}]}],"default-spec-id":1,"last-partition-id":1000,"properties":{},"current-snapshot-id":5440112098897409547,"snapshots":[{"snapshot-id":5440112098897409547,"sequence-number":1,"timestamp-ms":1786970727936,"manifest-list":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/partition/metadata/snap-5440112098897409547-0-2d48a1ff-55ba-4bae-9c6b-8732d8323bd7.avro","summary":{"operation":"append","added-files-size":"4932","added-data-files":"3","added-records":"4","changed-partition-count":"3","total-data-files":"3","total-delete-files":"0","total-records":"4","total-files-size":"4932","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":5440112098897409547,"timestamp-ms":1786970727936}],"metadata-log":[{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/partition/metadata/00000-cde33df7-2164-4f3a-ac15-10aab9c841ac.metadata.json","timestamp-ms":1786970727927},{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/partition/metadata/00001-49f1d5a2-0111-4c83-b71c-6a84ffc1eeb4.metadata.json","timestamp-ms":1786970727929}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":5440112098897409547,"type":"branch"}},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":1}
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/position","table-uuid":"415dd6b0-de3c-455d-a85d-78a650391aad","last-updated-ms":1786970727968,"last-column-id":4,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":0}
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/position","table-uuid":"415dd6b0-de3c-455d-a85d-78a650391aad","last-updated-ms":1786970727972,"last-column-id":4,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":8554796374254190464,"snapshots":[{"snapshot-id":8554796374254190464,"sequence-number":1,"timestamp-ms":1786970727972,"manifest-list":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/position/metadata/snap-8554796374254190464-0-8d1a982c-c1b7-47d9-a584-de646ada36b6.avro","summary":{"operation":"append","added-files-size":"1716","added-data-files":"1","added-records":"4","total-data-files":"1","total-delete-files":"0","total-records":"4","total-files-size":"1716","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":8554796374254190464,"timestamp-ms":1786970727972}],"metadata-log":[{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/position/metadata/00000-0c9f7b09-cbc3-4933-b0a8-01d8a809916e.metadata.json","timestamp-ms":1786970727968}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":8554796374254190464,"type":"branch"}},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":1}
@@ -0,0 +1,115 @@
1
+ {
2
+ "location": "file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/position",
3
+ "table-uuid": "415dd6b0-de3c-455d-a85d-78a650391aad",
4
+ "last-updated-ms": 1786970727972,
5
+ "last-column-id": 4,
6
+ "schemas": [
7
+ {
8
+ "type": "struct",
9
+ "fields": [
10
+ {
11
+ "id": 1,
12
+ "name": "id",
13
+ "type": "long",
14
+ "required": false
15
+ },
16
+ {
17
+ "id": 2,
18
+ "name": "region",
19
+ "type": "string",
20
+ "required": false
21
+ },
22
+ {
23
+ "id": 3,
24
+ "name": "product",
25
+ "type": "string",
26
+ "required": false
27
+ },
28
+ {
29
+ "id": 4,
30
+ "name": "amount",
31
+ "type": "double",
32
+ "required": false
33
+ }
34
+ ],
35
+ "schema-id": 0,
36
+ "identifier-field-ids": []
37
+ }
38
+ ],
39
+ "current-schema-id": 0,
40
+ "partition-specs": [
41
+ {
42
+ "spec-id": 0,
43
+ "fields": []
44
+ }
45
+ ],
46
+ "default-spec-id": 0,
47
+ "last-partition-id": 999,
48
+ "properties": {},
49
+ "current-snapshot-id": 8554796374254190465,
50
+ "snapshots": [
51
+ {
52
+ "snapshot-id": 8554796374254190464,
53
+ "sequence-number": 1,
54
+ "timestamp-ms": 1786970727972,
55
+ "manifest-list": "file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/position/metadata/snap-8554796374254190464-0-8d1a982c-c1b7-47d9-a584-de646ada36b6.avro",
56
+ "summary": {
57
+ "operation": "append",
58
+ "added-files-size": "1716",
59
+ "added-data-files": "1",
60
+ "added-records": "4",
61
+ "total-data-files": "1",
62
+ "total-delete-files": "0",
63
+ "total-records": "4",
64
+ "total-files-size": "1716",
65
+ "total-position-deletes": "0",
66
+ "total-equality-deletes": "0"
67
+ },
68
+ "schema-id": 0
69
+ },
70
+ {
71
+ "snapshot-id": 8554796374254190465,
72
+ "parent-snapshot-id": 8554796374254190464,
73
+ "sequence-number": 2,
74
+ "timestamp-ms": 1786970728972,
75
+ "manifest-list": "file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/position/metadata/snap-8554796374254190465-0-delete.avro",
76
+ "summary": {
77
+ "operation": "delete"
78
+ },
79
+ "schema-id": 0
80
+ }
81
+ ],
82
+ "snapshot-log": [
83
+ {
84
+ "snapshot-id": 8554796374254190464,
85
+ "timestamp-ms": 1786970727972
86
+ },
87
+ {
88
+ "snapshot-id": 8554796374254190465,
89
+ "timestamp-ms": 1786970728972
90
+ }
91
+ ],
92
+ "metadata-log": [
93
+ {
94
+ "metadata-file": "file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/position/metadata/00000-0c9f7b09-cbc3-4933-b0a8-01d8a809916e.metadata.json",
95
+ "timestamp-ms": 1786970727968
96
+ }
97
+ ],
98
+ "sort-orders": [
99
+ {
100
+ "order-id": 0,
101
+ "fields": []
102
+ }
103
+ ],
104
+ "default-sort-order-id": 0,
105
+ "refs": {
106
+ "main": {
107
+ "snapshot-id": 8554796374254190464,
108
+ "type": "branch"
109
+ }
110
+ },
111
+ "statistics": [],
112
+ "partition-statistics": [],
113
+ "format-version": 2,
114
+ "last-sequence-number": 2
115
+ }
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/sales","table-uuid":"4db7af6d-b75e-4376-9a52-9a026c046de5","last-updated-ms":1786970727853,"last-column-id":4,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"snapshots":[],"snapshot-log":[],"metadata-log":[],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":0}
@@ -0,0 +1 @@
1
+ {"location":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/sales","table-uuid":"4db7af6d-b75e-4376-9a52-9a026c046de5","last-updated-ms":1786970727885,"last-column-id":4,"schemas":[{"type":"struct","fields":[{"id":1,"name":"id","type":"long","required":false},{"id":2,"name":"region","type":"string","required":false},{"id":3,"name":"product","type":"string","required":false},{"id":4,"name":"amount","type":"double","required":false}],"schema-id":0,"identifier-field-ids":[]}],"current-schema-id":0,"partition-specs":[{"spec-id":0,"fields":[]}],"default-spec-id":0,"last-partition-id":999,"properties":{},"current-snapshot-id":7501977550537779287,"snapshots":[{"snapshot-id":7501977550537779287,"sequence-number":1,"timestamp-ms":1786970727885,"manifest-list":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/sales/metadata/snap-7501977550537779287-0-16494fa7-6997-413a-83c6-bfc6d53f3da5.avro","summary":{"operation":"append","added-files-size":"1716","added-data-files":"1","added-records":"4","total-data-files":"1","total-delete-files":"0","total-records":"4","total-files-size":"1716","total-position-deletes":"0","total-equality-deletes":"0"},"schema-id":0}],"snapshot-log":[{"snapshot-id":7501977550537779287,"timestamp-ms":1786970727885}],"metadata-log":[{"metadata-file":"file:///Users/rock/git/rock2/objectexplorer/reference/data/iceberg/sales/metadata/00000-82dd52ff-dd85-4033-b71a-c16358a1926e.metadata.json","timestamp-ms":1786970727853}],"sort-orders":[{"order-id":0,"fields":[]}],"default-sort-order-id":0,"refs":{"main":{"snapshot-id":7501977550537779287,"type":"branch"}},"statistics":[],"partition-statistics":[],"format-version":2,"last-sequence-number":1}