Skip to main content
Version: 0.11.12 (stable)

The fluvio table-format command

Table Format is used to customize the behavior of the Fluvio consumer output type [full-table].

With table-format, you can control the column labels, column ordering and control which keys are primary for displaying your live event data as row updates.

fluvio table-format

Install Fluvio plugins

The Fluvio CLI considers any executable with the prefix `fluvio-` to be a CLI plugin. For example, an executable named `fluvio-foo` in your PATH may be invoked by running `fluvio foo`.

This command allows you to install plugins from Fluvio's package registry.

Usage: fluvio install [OPTIONS] [PACKAGE]

Arguments:
[PACKAGE]
The ID of a package to install, e.g. "fluvio/fluvio-cloud"

Options:
--develop
Install the latest prerelease rather than the latest release

If the package ID contains a version (e.g. `fluvio/fluvio:0.6.0`), this is ignored

--hub
When this flag is provided, use the hub. Dev-only

--use-hub-defaults
Use local hub defaults. Implied if INFINYON_HUB_REMOTE or FLUVIO_CLOUD_PROFILE env vars are set - Dev-only

--channel <CHANNEL>
When this flag is provided, use the hub. Dev-only

--target <TARGET>
override default target arch determination

-h, --help
Print help (see a summary with '-h')

This is the schema for the Table Format yaml config used by fluvio table-format create

You only need to give your Table Format a name, and an input format (currently only JSON is supported)

TableFormat Config schema

This is a definition of the TableFormat config schema. Below are the descriptions of each field of the config file.

Check out the examples section below to see a few different config files and their resulting table views.

type: object
required: ["name"]
properties:
name:
type: string
minimum: 1
maximum: 100
inputFormat:
type: string
enum:
- JSON
columns:
type: array
items:
type: object
properties:
headerLabel:
type: string
keyPath:
type: string
primaryKey:
type: boolean

Field descriptions

name

Required

This is the name of your Table Format. You'll see this name when you run fluvio table-format list, and you'll use this name with fluvio consume topic-name --table-format <name>

inputFormat

Required

The only supported option for this field is "JSON"

columns

optional array - The default column display will be the top-level keys (ordered alphabetically).

Each element references a key from input json object.

The ordering of each element is important, as it will be the order columns will be rendered.

keyPath

This is the only required column field. This should be a top-level key. If the key path doesn't exist, the column will print with no data.

headerLabel

optional - default uses key name. Override the label of the column.

primaryKey

optional - default false. If specified to true, rendering updates to the table will compare the values of primary keys to define a set. When new data matches an existing set, it's row will be updated. Otherwise it will append a new row to the table.

Examples

For the following examples, we'll start off with our topic data arriving in this order.

{"key1":"a","key2":"1","key3":"Alice","id":123}
{"key1":"b","key2":"2","key3":"Bob","id":456}
{"key1":"c","key2":"3","key3":"Carol","id":789}
[{"key1":"x","key2":"10","key3":"Alice","id":123},{"key1":"y","key2":"20","key3":"Bob","id":456},{"key1":"c","key2":"30","key3":"Carol","id":789}]

The expected shape of the data is either:

  • a JSON object
  • a JSON array of objects
Example 0

No table-format

Using the [full-table] output without using a table-format print each key into a column in alphabetical order from left to right.

$ fluvio consume event-data -B --output full-table

Output:

┌('c' to clear table | 'q' or ESC to exit) | Items: 6─────────────────┐
│id key1 key2 key3 │
│123 a 1 Alice │
│456 b 2 Bob │
│789 c 3 Carol │
│123 x 10 Alice │
│456 y 20 Bob │
│789 c 30 Carol │
└─────────────────────────────────────────────────────────────────────┘
Example 1

Display a subset of data

In this example, we only want to display data for only 2 of the keys. The ordering of the columns will be key1 first, then key2.

Config:

# exampleformat1.yaml
name: "exampleformat1"
inputFormat: "JSON"
columns:
- keyPath: "key1"
- keyPath: "key2"

Create the table-format:

$ fluvio table-format create --config exampleformat1.yaml

Display your table:

$ fluvio consume event-data -B --output full-table --table-format exampleformat1

Output:

┌('c' to clear table | 'q' or ESC to exit) | Items: 6─────────────────┐
│key1 key2 │
│a 1 │
│b 2 │
│c 3 │
│x 10 │
│y 20 │
│c 30 │
└─────────────────────────────────────────────────────────────────────┘
Example 2

Reorder columns

In this example, we rearrange the order so that the columns will be ordered: id, key3, key1, key2

Config:

# exampleformat2.yaml
name: "exampleformat2"
inputFormat: "JSON"
columns:
- keyPath: "id"
- keyPath: "key3"
- keyPath: "key1"
- keyPath: "key2"

Create the table-format:

$ fluvio table-format create --config exampleformat2.yaml

Display your table:

$ fluvio consume event-data -B --output full-table --table-format exampleformat2

Output:

┌('c' to clear table | 'q' or ESC to exit) | Items: 6─────────────────┐
│id key3 key1 key2 │
│123 Alice a 1 │
│456 Bob b 2 │
│789 Carol c 3 │
│123 Alice x 10 │
│456 Bob y 20 │
│789 Carol c 30 │
└─────────────────────────────────────────────────────────────────────┘
Example 3

Rename columns

In this example, we're rearranging the order of the columns, and changing the column header to something more meaningful for our data.

Config:

# exampleformat3.yaml
name: "exampleformat3"
inputFormat: "JSON"
columns:
- keyPath: "id"
headerLabel: "ID"
- keyPath: "key3"
headerLabel: "Name"
- keyPath: "key2"
headerLabel: "Number"
- keyPath: "key1"
headerLabel: "Letter"

Create the table-format:

$ fluvio table-format create --config exampleformat3.yaml

Display your table:

$ fluvio consume event-data -B --output full-table --table-format exampleformat3

Output:

┌('c' to clear table | 'q' or ESC to exit) | Items: 6─────────────────┐
│ID Name Number Letter │
│123 Alice 1 a │
│456 Bob 2 b │
│789 Carol 3 c │
│123 Alice 10 x │
│456 Bob 20 y │
│789 Carol 30 c │
└─────────────────────────────────────────────────────────────────────┘
Example 4: Choose primary key for row-updates

For event-sourced data, it may be beneficial to display the most up-to-date data by updating the row with current values. To do this, we select a primary key within the data.

When new data arrives, if the values at the primary key match, we replace the row with the more recent data.

Config:

# exampleformat4.yaml
name: "exampleformat4"
inputFormat: "JSON"
columns:
- keyPath: "id"
headerLabel: "ID"
primaryKey: true
- keyPath: "key3"
headerLabel: "Name"
- keyPath: "key2"
- keyPath: "key1"

Command:

$ fluvio table-format create --config exampleformat4.yaml

Display your table:

$ fluvio consume event-data -B --output full-table --table-format exampleformat4

Output:

┌('c' to clear table | 'q' or ESC to exit) | Items: 3─────────────────┐
│ID Name key2 key1 │
│123 Alice 10 x │
│456 Bob 20 y │
│789 Carol 30 c │
└─────────────────────────────────────────────────────────────────────┘

Consumer output table formatting

This document covers two of the the CLI Consumer's output types.

  • --output table which is a simple formatted table
  • --output full-table which is a text-based user interface, with features such as live row-based updates, and column customization via [table-format]

To demonstrate the table output, we're going to use the following input

Example initial topic input

{"key1":"a","key2":"1","key3":"Alice","id":123}
{"key1":"b","key2":"2","key3":"Bob","id":456}
{"key1":"c","key2":"3","key3":"Carol","id":789}
[{"key1":"x","key2":"10","key3":"Alice","id":123},{"key1":"y","key2":"20","key3":"Bob","id":456},{"key1":"c","key2":"30","key3":"Carol","id":789}]

The expected shape of the data is either:

  • a JSON object
  • a JSON array of objects

table

By default the top-level object keys will be used as the column names, sorted by alphabetical order. For more customizability, please use the [full-table] output

Example command:

$ fluvio consume example-topic --output table -B

Example output:

 id  | key1 | key2 | key3
123 | a | 1 | Alice
456 | b | 2 | Bob
789 | c | 3 | Carol
123 | x | 10 | Alice
456 | y | 20 | Bob
789 | c | 30 | Carol

full-table

By default the top-level object keys will be used as the column names, sorted by alphabetical order.

Example command:

$ fluvio consume example-topic --output full-table -B

Example output:

┌('c' to clear table | 'q' or ESC to exit) | Items: 6─────────────────┐
│id key1 key2 key3 │
│123 a 1 Alice │
│456 b 2 Bob │
│789 c 3 Carol │
│123 x 10 Alice │
│456 y 20 Bob │
│789 c 30 Carol │
└─────────────────────────────────────────────────────────────────────┘

You can scroll with

  • up/down arrow keys or the mouse scroll wheel to move one row at a time
  • Page up/Page down to move 5 rows up/down at a time
  • Home to move to the top of the table
  • End to move to the bottom of the table
  • c to clear the table state
  • q or ESC to exit the table

Customize the full-table table

You may have json data that isn't most effectively displayed with the keys ordered alphabetically. Or your data is event sourced, and you only want to see the most recent data organized by one or more primary keys.

In that case, to customize the full-table output, you can provide the name of your table-format

fluvio consume <topic-name> --output full-table --table-format <table-format name>