table

Powerpipe is now the recommended way to run dashboards and benchmarks! Mods still work as normal in Steampipe for now, but they are deprecated and will be removed in a future release:

A table displays query results in a dashboard.

Table blocks can be declared as named resources at the top level of a mod, or be declared as anonymous blocks inside a dashboard or container, or be re-used inside a dashboard or container by using a table with base = <mod>.table.<table_resource_name>.

Example Usage

table {
title = "S3 Buckets"
width = 4
sql = <<-EOQ
select
title,
arn,
region
from
aws_s3_bucket
order by
title
EOQ
}

Argument Reference

ArgumentTypeOptional?Description
argsMapOptionalA map of arguments to pass to the query.
baseTable ReferenceOptionalA reference to a named table resource that this table should source its definition from. title and width can be overridden after sourcing via base.
columnStringOptionalA named block matching the name of the column you wish to configure. See column.
paramBlockOptionalA param block that defines the parameters that can be passed in to the query. param blocks may only be specified for tables that specify the sql argument.
queryQuery ReferenceOptionalA reference to a query resource that defines the query to run. A table may either specify the query argument or the sql argument, but not both.
sqlStringOptionalAn SQL string to provide data for the table. A table may either specify the query argument or the sql argument, but not both.
titleStringOptionalA plain text title to display for this table.
typeStringOptionalThe type of the table. Can be table (default) or line. line view transposes each row into a key/value pair (column name/column value) item view
widthNumberOptionalThe width as a number of grid units that this item should consume from its parent.

Table Properties

column

PropertyTypeDefaultValues
displaystringallall (default) will show the column at all breakpoints. none will never show the column.
wrapstringnoneall will wrap the column contents at all breakpoints. none (default) will never wrap the column contents.
hrefstringA url that the column should link to. The href may use a jq template to dynamically generate the link for each row.

jq Templates

The href argument allows you to specify a jq template to dynamically generate a hyperlink from the data in the row. To use a jq template, enclose the jq in double curly braces ({{ }}).

Steampipe will pass each row of data to jq in the same format that is returned by steampipe query json mode output, where the keys are the column names and the values are the data for that row.

For example, this query:

select
instance_id,
region,
sg->>'GroupId' as security_group
from
aws_ec2_instance,
jsonb_array_elements(security_groups) as sg

will present rows to the jq template in this format:

{
"instance_id": "i-03d11d111b1407bbc",
"region": "us-east-2",
"security_group": "sg-01ee40ea54e0fa089"
}

which you can then use in a jq template in the href argument:

table {
title = "Attached Security Groups"
width = 4
sql = <<-EOQ
select
instance_id,
region,
sg->>'GroupId' as security_group
from
aws_ec2_instance,
jsonb_array_elements(security_groups) as sg
EOQ
column "security_group" {
href = "${dashboard.aws_vpc_security_group_detail.url_path}?input.security_group_id={{.'security_group' | @uri}}"
}
}

Refer to JQ Escaping & Interpolation for more advanced examples.

More Examples

Table with options for columns

table {
title = "S3 Buckets"
width = 3
sql = <<-EOQ
select
title,
arn,
region
from
aws_s3_bucket
where name like '%vandelay%'
order by
title
EOQ
column "region" {
display = "none"
}
column "arn" {
wrap = "all"
}
}

Table in line mode

table {
type = "line"
title = "S3 Buckets"
width = 4
sql = <<-EOQ
select
title,
arn,
region
from
aws_s3_bucket
where
name = 'vandelay-industries-elaines-bucket'
order by
title
EOQ
}
table {
title = "Attached Security Groups"
width = 4
sql = <<-EOQ
select
instance_id,
region,
sg->>'GroupId' as security_group
from
aws_ec2_instance,
jsonb_array_elements(security_groups) as sg
EOQ
column "security_group" {
href = "${dashboard.aws_vpc_security_group_detail.url_path}?input.security_group_id={{.'security_group' | @uri}}"
}
}