Repository navigation
Conversation
| These need a catalog to enumerate databases and tables, so load them through a | ||
| catalog as the identifier ``sys.<name>`` rather than from a bare | ||
| ``<warehouse>/sys/<name>`` path; a path load without catalog context fails with | ||
| ``global system table requires catalog context: <name>``. |
There was a problem hiding this comment.
It seems that sys.catalog_options has requires_catalog=false. With the corresponding option enabled, we might be able to load directly via path.
| file-system commits for both table types on non-object-store paths. | ||
| Object-store paths require REST catalog commit mode. Changelog is out of | ||
| Object-store paths require a catalog-mediated commit, configured with either | ||
| ``CommitContextBuilder::WithCatalog()`` or ``UseRESTCatalogCommit()``; |
There was a problem hiding this comment.
Changelog support is already in place for both the write path and the commit path.
It’s just that the overwrite commit flow will ignore the changelog file and print a warning.
| - **Arrow integration**: batch read and write interfaces based on the [Arrow Columnar In-Memory Format](https://arrow.apache.org). | ||
| - **File systems**: file system abstraction with built-in local, Jindo, OSS, and S3 file system support. | ||
| - **File formats**: file format abstraction with built-in ORC, Parquet, and Avro support. | ||
| - **File formats**: file format abstraction with built-in Parquet, Blob, ORC, and Avro support, plus optional Lance and Mosaic formats. |
There was a problem hiding this comment.
How about removing Vortex support first?
There was a problem hiding this comment.
@lucasfang, I left two comments for documentation correctness issues. PTAL.
| Object-store paths require a catalog-mediated commit, configured with either | ||
| ``CommitContextBuilder::WithCatalog()`` or ``UseRESTCatalogCommit()``; | ||
| neither needs an atomic rename on the object store. Changelog is out of |
There was a problem hiding this comment.
Require version management for object-store commits. WithCatalog() alone does not enable object-store commits. IsCatalogCommit() requires a catalog implementing VersionManagedCatalog and advertising SupportsVersionManagement(); FileSystemCatalog falls back to rename-based commits and remains rejected on object-store paths. Please qualify this guidance to require a version-managed catalog, such as REST, so users do not follow a configuration that still fails.
| These need a catalog to enumerate databases and tables, so load them through a | ||
| catalog as the identifier ``sys.<name>`` rather than from a bare | ||
| ``<warehouse>/sys/<name>`` path; a path load without catalog context fails with | ||
| ``global system table requires catalog context: <name>``. | ||
| ``sys.all_table_options``, ``sys.tables`` and ``sys.partitions`` are always | ||
| available. ``sys.catalog_options`` is disabled by default and has to be turned |
There was a problem hiding this comment.
Document the public API limitation for global tables. Loading through a catalog does not currently provide the advertised read path. FileSystemCatalog::GetTable(Identifier("sys", "tables")) reaches TableSchemaExists(), which rejects system tables. TableScan::Create() and TableRead::Create() also call LoadFromPath(), which leaves the catalog null even when WithCatalog() was supplied. Listing and schema lookup work, but reading sys.all_table_options, sys.tables, and sys.partitions through the public API does not. Please document that limitation instead of presenting catalog loading as a working alternative.
Purpose
Linked issue: close #466
Correct statements the implementation contradicts and bring the feature, build-switch, plugin-target and system-table lists up to date. The substantive errors:
compaction.rstdocumentedcompaction.file-size, an option that has never existed, andparquet.enable-dictionary, renamed toparquet.enable.dictionaryin #263;primary_key_global_index.rststated commit message v12, raised to 13 in #247;write.rstsaid object-store paths require REST catalog commit mode, althoughtable.cppalso acceptsWithCatalog(). The stale lists: README now covers primary-key commit and all seven registered formats instead of three,building.rstgainsPAIMON_ENABLE_MOSAIC,PAIMON_ENABLE_VORTEXandPAIMON_ENABLE_NETWORK_TESTS,build_system.rstgains four plugin targets,basic_concepts.rstgains Vortex, which removes its contradiction withdata_types.rst, andsystem_tables.rstgoes from 4 documented suffixes to all 15. The coverage gaps:api/catalog.rstaddsTable,DatabaseandCatalogOptions,catalog.rstdocuments theTable::NewScan,NewRead,NewWriteandNewCommitentry points added in #434 as equivalent to theCreate()calls, andcode-style.mdadds the missing hooks, clang-tidy check groups and testing utilities. The code examples: theMapSharedShreddingAccessBuildercomment in an installed public header calledbuilder->AddKey()on theResult<std::unique_ptr<...>>thatCreate()returns and dropped theStatusfromAddKey,blob_defs.hqualified its own constants asBlob::where no such members exist, the credential provider example incatalog.rstcalledmake_shared<MyCredentialProvider>(path, options)against a class declaring no such constructor, andmanifest_entry_cache.rstbuilt anLruCachewhose header lives insrc/and is never installed. Two more compiled on their own but broke at the use their own comment documents:variant.hassignedbuilder.Build("v")toauto fieldand then told the reader to pass it toSetReadSchema, which rejects aResult, and theSetReadSchemaexample inread_context.hdiscarded the[[nodiscard]]arrow::Statusreturned byarrow::ExportSchema. That one now followsexamples/read_write_demo.cpp, the user-facing precedent, because the internalPAIMON_RETURN_NOT_OK_FROM_ARROWmacro is not installed.Tests
Comment and prose only, so no unit or integration test applies. Verified locally:
pre-commit run --filesover the sixteen changed files passes, including Sphinx Lint, codespell, clang-format and trailing-whitespace, andgit diff --checkis clean. Every correction was taken from the source rather than assumed: option names fromdefs.cppandparquet_format_defs.h, the compaction threshold fromCoreOptions::GetCompactionFileSize(), the commit-message version range fromCommitMessageSerializer::Deserialize, the object-store commit modes from the guard intable.cpp, plugin targets from eachadd_paimon_libcall together with theadd_subdirectoryguards that establish which of them build unconditionally, system-table semantics from the class comments inmetadata_system_tables.handglobal_system_tables.h, and the testing-utility entries from the implementations themselves. The cross-reference and doxygen-target checks overdocs/source/still resolve; the doxygen target count rises from 89 to 92 with the three added classes. All five C++ examples were extracted into translation units and built withg++ -std=c++17 -fsyntax-onlybefore and after the fix, and each pair behaves as intended: the pre-fix version fails with the mismatch its fix targets and the fixed version compiles cleanly. The failures arebase operand of '->' has non-pointer type 'Result<unique_ptr<MapSharedShreddingAccessBuilder>>','kExtensionTypeKey' is not a member of 'paimon::Blob',no matching function for call to 'MyCredentialProvider::MyCredentialProvider(...)',cannot convert 'Result<unique_ptr<ArrowSchema>>' to 'unique_ptr<ArrowSchema>', andignoring returned value of type 'arrow::Status', declared with attribute 'nodiscard'. Two of them need the harness to state the defect: thevariant.hexample compiles on its own, so its unit also performs theSetReadSchemacall the comment prescribes, and discarding a[[nodiscard]]value is only a warning, so theread_context.hunit adds-Werror=unused-result. TheLruCachefix is prose about header availability, so it was checked against the install rules instead:CMakeLists.txtinstalls onlyinclude/, andScanContextBuilder::WithCachetakes the publicCacheinterface.API and Format
No. Comments and prose only: no declaration, signature, symbol or behavior changes anywhere. Three installed public headers are touched —
include/paimon/data/shredding/map_shared_shredding_schema_utils.h,include/paimon/data/variant.handinclude/paimon/read_context.h— and only inside their///examples, so the generated API documentation changes while the ABI and the source compatibility ofMapSharedShreddingAccessBuilder,VariantAccessBuilderandReadContextBuilderdo not. No storage format or protocol is affected. Two statements now record the current facts rather than change them:CommitMessageSerializerwrites version 13 and reads versions 3 through 13, and an object-store commit accepts eitherCommitContextBuilder::WithCatalog()orUseRESTCatalogCommit(), the two being mutually exclusive.Documentation
This change is itself the documentation work; it introduces no new feature. Sixteen files: twelve documentation ones —
README.md,docs/code-style.md,docs/source/basic_concepts.rst,docs/source/build_system.rst,docs/source/building.rst,docs/source/api/catalog.rstand, underdocs/source/user_guide/,catalog.rst,compaction.rst,manifest_entry_cache.rst,primary_key_global_index.rst,system_tables.rstandwrite.rst— plus comment-only example fixes in four headers,include/paimon/data/shredding/map_shared_shredding_schema_utils.h,include/paimon/data/variant.h,include/paimon/read_context.handsrc/paimon/common/data/blob_defs.h. Two known gaps are deliberately left out because they need new prose rather than corrections: the realtime module has 16 exported types with no user guide or API page, and roughly thirty further exported classes that the user guide explains at length have no API reference page.Generative AI tooling
Generated-by: Qoder