Skip to main content

tsfile-cli

Use specifically for the project's C++ `tsfile-cli` in cpp/tools: inspect, preview, export, or create an Apache TsFile; report metadata or per-column counts; or use its explicit single-table CSV write command.

소스 정보

저장소
apache/tsfile
최근 소스 활동
2026년 10월 8일 08:07
감지된 SKILL.md 언어
영어
스타
207
포크
106

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
tsfile-cli
description
Use specifically for the project's C++ `tsfile-cli` in cpp/tools: inspect, preview, export, or create an Apache TsFile; report metadata or per-column counts; or use its explicit single-table CSV write command.
# tsfile-cli Single pipe-friendly C++ binary to inspect, read, export, and create `.tsfile` files. Source `cpp/tools/`. Result data goes to stdout except `export`, `sketch -o`, and `write`; diagnostics go to stderr. ## Scope Use this skill only for the C++ `tsfile-cli` binary. For Java, Python, C++, or C SDK integration, schema design, Java CSV/Parquet/Arrow import, Java table point-count metadata checks or backfill, and programmatic tree-model writes, load the sibling `tsfile` skill at `../tsfile/SKILL.md`. The names overlap but the semantics do not: `tsfile-cli count` is a read-only per-column report, not the Java table point-count property tool. `tsfile-cli write` is the C++ binary's narrow one-file/stream, one-table CSV import; it does not replace the Java batch and format-aware import tools. ## Binary - Name `tsfile-cli` (CMake target `tsfile_cli`). Check `PATH`, `cpp/build/*/bin/tsfile-cli`, or `cpp/target/build/bin/tsfile-cli`. - Build only if missing: `cd cpp && bash build.sh -t=Debug`. - Use `tsfile-cli <command> --help` for the installed binary's supported syntax and result fields before choosing flags. ## Read `tsfile-cli <cmd> [opts] <file.tsfile>` · `tsfile-cli --help | --version | help` | cmd | output | scans pages | |---|---|---| | `ls` | `model,object` rows for tree devices or table names | no | | `schema` | `model,object,column,category,data_type,encoding,compression` | no | | `meta` | `size_bytes,format_version,model` | no | | `stats` | FIELD statistics, null counts, and `stats_source` | maybe | | `count` | per-column row/entity/value counts; no summary row | maybe | | `head` | first N rows (default 10, `-n`) | yes | | `cat` | all matching rows (streamed; `table` format buffers) | yes | | `sketch` | physical layout text with offsets and chunk/page details | no FIELD decode | | `export` | writes one object file or a numbered multi-object directory | yes | Inspect `ls`, `schema`, and `meta` before querying rows to identify the model, objects, and columns. `stats` can scan when statistics are unavailable, and table-model `count` scans rows; neither is guaranteed to be metadata-only. For `head` and `cat`, omit `-d/-t` only when the selected model has exactly one accessible object. Multi-object files require explicit scope. `schema`, `stats`, and `count` visit every object when scope is omitted. ```text opts: -f table|ndjson|csv (default table, including pipes) -d <device> | -t <table> (mutually exclusive) -m <column> repeat for projection or metadata filtering; no comma lists -n N · --offset N · --start <int64> · --end <int64> for head/cat/export --tag-filter C OP [V] for table TAG predicates OP=eq|neq|regexp (requires V) or is-null|not-null (no V) --tag-match all|any when two or more tag filters are present ``` - Row time bounds are inclusive. Table results include `time`, all TAG columns, and then selected FIELD columns; `-m` does not remove TAG columns. - `stats` reports `non_null_count,null_count,min_time,max_time,min,max,first,last,sum` with model/object/FIELD identity and `stats_source`; table rows include `tag.<name>` columns after `object`. - `count` reports `model,object,column,category,row_count,entity_count,non_null_count,null_count,min_time,max_time,time_source`. - `ndjson` emits one JSON object per line. INT64/TIMESTAMP values are decimal strings; BOOLEAN/INT32/FLOAT/DOUBLE are bare values, and NULL/NaN/Inf become JSON `null`. CSV includes a header and quotes cells using RFC 4180 rules. - The aligned `table` format buffers rows and renders control characters as visible escapes. Prefer `csv` or `ndjson` for large dumps and pipelines. ## Sketch and export `sketch [-o <file>] [--force] <file.tsfile>` prints the physical layout to stdout or an output file. It does not accept `-f` or object scope. `--force` requires an output path and replaces only an existing regular file. ```text export (-d <device> | -t <table>) --type table|ndjson|csv -o <file> [query options] [--force] <file.tsfile> export (-d <device>... | -t <table>...) --type table|ndjson|csv --output-dir <dir> [query options] <file.tsfile> ``` `export` requires explicit scope and `--type`; `-f` does not select the export type. It accepts the row query options above. Single-object export commits the output file atomically; `--force` allows replacing a regular file. Multi-object export repeats only devices or only tables, writes numbered files and `_manifest.json`, and requires a new output directory. ## Write `tsfile-cli write --table <name> (--tag <name> STRING)* (--field <name> <TYPE>)+ [--encoding <TYPE> <ENC>] [--compression <TYPE> <COMP>] (-i <input.csv>|--stdin) -o <out.tsfile> [-v]` Imports rows into a **new table-model** file. The target must not already exist. Input is strict CSV with a required `time` header; all other columns are declared explicitly by `--tag` and `--field` — **no type inference**. ```text TYPE ∈ { BOOLEAN, INT32, INT64, FLOAT, DOUBLE, STRING, TEXT, TIMESTAMP, DATE, BLOB } ``` - `--tag` declarations must use `STRING`; at least one `--field` is required. - The CSV header must contain `time` and exactly the declared TAG/FIELD names; rows are mapped by header name rather than physical column order. - `--encoding` and `--compression` may override the bound defaults by data type. - `--stdin` or `-i <input.csv>` is required; TSV, `--columns`, `--no-header`, and `--header-match` are not supported. - Unquoted `\N` denotes NULL. Empty STRING/TEXT cells are empty strings; quoted `"\N"` is literal text. `DATE` cells are `YYYY-MM-DD`, and `TIMESTAMP`/`time` use strict decimal int64 values. - A failed import leaves no partial output; success is silent unless `-v` is used. - **timestamps must be strictly increasing per device** (device = tag-column values); rows for different tags may interleave/reuse timestamps. Out-of-order input → error with line number. - `-v` writes a post-commit summary and resolved column physical settings to stderr. Tree-model / JSON / programmatic writes → C++ SDK `cpp/examples/cpp_examples/demo_write.cpp` (`TsFileTableWriter`/`TsFileWriter` + `Tablet`); Java/Python writers under `java/`, `python/`. ## Example workflow Set `B` to the discovered executable. Use new output paths for this example. ```sh B=tsfile-cli printf 'time,site,temperature,humidity\n0,north,21.5,40\n1,north,21.7,41\n' \ | "$B" write --table sensors --tag site STRING \ --field temperature DOUBLE --field humidity INT32 --stdin -o sensors.tsfile "$B" ls -f ndjson sensors.tsfile "$B" meta -f ndjson sensors.tsfile "$B" schema -t sensors -f csv sensors.tsfile "$B" stats -t sensors -m temperature -f csv sensors.tsfile "$B" count -t sensors -f csv sensors.tsfile "$B" head -t sensors -m temperature -m humidity -n 20 -f csv sensors.tsfile "$B" cat -t sensors --tag-filter site eq north -m temperature -f ndjson sensors.tsfile "$B" export -t sensors --type csv -o sensors.csv sensors.tsfile "$B" sketch -o layout.txt sensors.tsfile ``` ## Exit status - `0`: success; `1`: usage/parameter error; `2`: TsFile/CSV input problem; `3`: query/runtime, target, or write/commit failure. - On nonzero exit, produced stdout or files are not complete results. - Shell redirection (`cat > file`) is not atomic; use `export` for atomic single-object output.
GitHub에서 보기