Acquire / database · All operations
Read from a database
Read from a relational or NoSQL database, warehouse or lake.
Status
- In arcform
Runs as a SQL step
arcform carries it as a
sql:step today, with thesqlite_scannerextension.- Shape of the result
- a new table, from no input table
- Level
- needs a DuckDB extension
The DuckDB step
Attach a SQLite file and query it
It reads the orders table the proofs share. Create it first:
CREATE TABLE orders AS SELECT * FROM (VALUES
(1, 'Alice Ng', 'north', DATE '2026-01-03', 120.00, 'widget', 'a|b', '{"channel":"web","items":[1,2]}'),
(2, 'alice ng', 'north', DATE '2026-01-05', 80.50, 'gadget', 'b', '{"channel":"shop","items":[3]}'),
(3, 'Bob Okafor', 'south', DATE '2026-01-05', 300.00, 'widget', 'a|c', '{"channel":"web","items":[4,5,6]}'),
(4, 'Carla Díaz', 'east', DATE '2026-01-09', NULL, 'gizmo', NULL, '{"channel":"web","items":[]}'),
(5, 'Bob Okafor', 'south', DATE '2026-01-12', 45.25, 'gadget', 'c', '{"channel":"phone","items":[7]}'),
(6, 'Dev Patel', 'west', DATE '2026-01-12', 510.00, 'widget', 'a', '{"channel":"web","items":[8,9]}'),
(7, 'Carla Diaz', 'east', DATE '2026-01-20', 99.99, 'gizmo', 'b|c', '{"channel":"shop","items":[10]}'),
(8, 'Dev Patel', 'west', DATE '2026-02-02', 510.00, 'widget', 'a', '{"channel":"web","items":[8,9]}'),
(9, 'Eve Larsen', NULL, DATE '2026-02-03', 15.00, 'gadget', NULL, '{"channel":"web","items":[11]}'),
(10, 'Alice Ng', 'north', DATE '2026-02-10', 220.00, 'gizmo', 'a|b|c', '{"channel":"phone","items":[12,13]}')
) t(order_id, customer, region, order_date, amount, product, tags, meta);Then run the statement:
INSTALL sqlite; LOAD sqlite;
ATTACH '<your_scratch_dir>/src.sqlite' AS src (TYPE sqlite);
CREATE TABLE src.orders AS SELECT order_id, customer, amount FROM orders;
DETACH src;
ATTACH '<your_scratch_dir>/src.sqlite' AS again (TYPE sqlite, READ_ONLY);
CREATE TEMP TABLE result AS
SELECT count(*) AS n, count(amount) AS amounts FROM again.orders;
SELECT * FROM result;
SELECT CASE WHEN ((SELECT n = 10 AND amounts = 9 FROM result)) THEN 'as expected' ELSE error('the SQLite file did not return the 10 rows written to it') END AS verdict;Replace <your_scratch_dir> with a directory of your own that you can write to before running the statement.
- The statement writes
src.sqliteitself, in<your_scratch_dir>. - It needs the
sqlite_scannerextension. - The statement checks its own result and raises an error when it is wrong: “the SQLite file did not return the 10 rows written to it”.
- It passed on DuckDB
v2.0.0 (Cyanoptera) d54cbbe3df.
Variants
- Attach a database as a catalog
Register a database, file or catalog so its tables can be queried in place by name.
- List the tables in a database
Return the tables, collections or catalogs a connection holds, as rows of metadata rather than data.
- Query a database for each input row
Run a query once per input row, or with keys taken from an input table, and return the matching database rows.
Export a table in bulk
Unload a whole table or database to files with the database's own bulk export.
Open or close a database connection
Set up, hand on or close the connection that later database steps use.
Read only new or changed rows
Fetch only the rows added or changed since the last run, by a watermark column or change data capture.
Other database operations
Database steps that read no table, such as returning the key of the last inserted record or managing a cluster.
Read a table or query result
Pull the rows of a database table, collection or query result into the pipeline.
What other tools call it
Meridian's classification; an independent blind rating agreed on 86.2% of 312 rows (exact class, version 2).
Alteryx Designer (3)
Calgary Inputread 2026-09-27Query an indexed Calgary database
Connect In-DBread 2026-09-27Open an in-database connection and start a stream from a table or query
Database input connectors (family)read 2026-09-272 tools: Google BigQuery Input, MongoDB Input (deprecated)
Apache DataFusion (1)
CREATE EXTERNAL CATALOGread 2026-09-27Register a catalog from a catalog provider factory, such as an Iceberg REST catalog
Apache Hop (12)
(Experimental) Beam Hive catalog inputread 2026-09-27Experimental: read tables registered in an Apache Hive metastore on the Beam engine
Beam BigQuery Inputread 2026-09-27Read a table or query result from Google BigQuery on the Beam engine
Beam Bigtable inputread 2026-09-27Read rows from Google Cloud Bigtable on the Beam engine
Bulk load from MySQL into fileread 2026-09-27Export a MySQL table to a text file with SELECT INTO OUTFILE
Cassandra Inputread 2026-09-27Read rows from a Cassandra table with a CQL query
LDAP Inputread 2026-09-27Read entries such as users and roles from an LDAP directory
MongoDB Inputread 2026-09-27Read documents from a MongoDB collection by query or aggregation pipeline
Neo4j Cypherread 2026-09-27Run a Cypher statement against Neo4j per row or batch, reading or writing
Neo4j Cypher builderread 2026-09-27Compose and run a Cypher statement from a list of node and relationship operations
Redis Inputread 2026-09-27Read string, hash, set or list values from Redis
Splunk inputread 2026-09-27Run a Splunk search query and return the results as rows
Table Inputread 2026-09-27Read rows from a database with a SQL query, optionally parameterised by input rows
Apache NiFi (8)
CaptureChangeMySQLread 2026-09-27Read change data capture events (insert, update, delete) from a MySQL database
ExecuteSQLread 2026-09-27Run a SQL select over JDBC and emit the result set as Avro
ExecuteSQLRecordread 2026-09-27Run a SQL select over JDBC and emit the result set through a record writer
GenerateTableFetchread 2026-09-27Generate SQL select statements that fetch a table in pages, optionally incrementally
ListDatabaseTablesread 2026-09-27List tables of a database connection, one FlowFile of metadata attributes per table
NoSQL, search and analytics store query processors (family)read 2026-09-2712 processors, MongoDB, DynamoDB, Elasticsearch, Azure Data Explorer, Splunk: GetMongo, SearchElasticsearch, …
QueryDatabaseTableread 2026-09-27Fetch rows whose maximum-value columns exceed the values seen before; output Avro
QueryDatabaseTableRecordread 2026-09-27Fetch rows whose maximum-value columns exceed the values seen before; output via record writer
Apache SeaTunnel (1)
Source connectors (family)read 2026-09-2780 connectors, one per system: Jdbc, MySQL-CDC, Kafka, S3File, LocalFile, Http, Iceberg, FakeSource, …
AWS Glue (1)
Database and warehouse connections (family)read 2026-09-2716 connection types: Amazon Redshift, Amazon DynamoDB, JDBC, MongoDB, Snowflake, Google BigQuery, …
Azure Data Factory (6)
Copy activity source data stores: Azure (family)read 2026-09-2716 data stores usable as copy source: Azure Blob Storage, Azure Cosmos DB for NoSQL, Azure Cosmos DB for PostgreSQL, …
Copy activity source data stores: Database (family)read 2026-09-2729 data stores usable as copy source: Amazon RDS for Oracle, Amazon RDS for SQL Server, Amazon Redshift, DB2, …
Copy activity source data stores: Microsoft Fabric (family)read 2026-09-272 data stores usable as copy source: Microsoft Fabric Lakehouse, Microsoft Fabric Warehouse
Copy activity source data stores: NoSQL (family)read 2026-09-274 data stores usable as copy source: Cassandra, Couchbase (Preview), MongoDB, MongoDB Atlas
Lookup Activityread 2026-09-27Read a record, table name or value from an external source for later activities; not a join
Sourceread 2026-09-27Data source of a data flow stream
Bruin (2)
ingestr: custom SQL query sourceread 2026-09-27Use a query: prefixed SQL statement as source_table for SQL sources
ingestr: database and lake sources (family)read 2026-09-2716 source pages: cassandra, db2, dynamodb, mongo, mysql, …; more are on the platform pages
DuckDB (1)
ATTACH and DETACHread 2026-09-27Attach another database file or remote database as a catalog
Duckle (14)
BigQueryread 2026-09-25read from BigQuery through DuckDB bigquery extension
Cloud Warehouses sources outside DuckDB (family)read 2026-09-254 components, one per system, run by Rust drivers and HTTP clients, outside DuckDB: snowflake, databricks, synapse, gizmosql
Databases sources outside DuckDB (family)read 2026-09-258 components, one per system, run by Rust drivers and HTTP clients, outside DuckDB: sqlserver, oracle, db2, access, turso, …
DuckDBread 2026-09-25read a table from an attached DuckDB file
DuckDB Quackread 2026-09-25read from DuckDB Quack through DuckDB quack extension
DuckLakeread 2026-09-25read a table from an attached DuckLake catalog, optionally as of a snapshot
MotherDuckread 2026-09-25read from MotherDuck through DuckDB motherduck extension
Network relational sources via the mysql extension (family)read 2026-09-252 components, one per system, run by DuckDB mysql extension: mysql, mariadb
2 components, one per system, run by DuckDB postgres extension: postgres, cockroach
NoSQL & Search sources outside DuckDB (family)read 2026-09-2510 components, one per system, run by Rust drivers and HTTP clients, outside DuckDB: mongodb, cassandra, scylla, redis, …
Redshiftread 2026-09-25read from Redshift through DuckDB postgres extension
SQLiteread 2026-09-25read a SQLite table with sqlite_scan
Vector / AI Databases sources outside DuckDB (family)read 2026-09-255 components, one per system, run by Rust drivers and HTTP clients, outside DuckDB: qdrant, weaviate, milvus, pixeltable, …
pgvector (Postgres)read 2026-09-25read from pgvector (Postgres) through DuckDB postgres extension
EasyMorph (2)
Import from databaseread 2026-09-27Read a table or query result from a database
Select matching database rowsread 2026-09-27Read database rows whose key fields match, or do not match, keys held in an EasyMorph table
Ibis (2)
DatabaseTableread 2026-09-27A named table that lives in a connected backend
UnboundTableread 2026-09-27Declare a table by name and schema alone, bound to a backend only when executed
KNIME Analytics Platform (26)
DB Connection Closerread 2026-09-27Close one or more open database connections
DB Connection Extractorread 2026-09-27Take the bare database connection out of a DB data (query) port
DB Connectorread 2026-09-27Open a connection to any database through a JDBC driver
DB Looperread 2026-09-27Run a query repeatedly with IN-lists filled from input table values and collect the rows
DB Parameterized Query Readerread 2026-09-27Run a parameterised query once per input row and return the combined results
DB Query Readerread 2026-09-27Run an entered SQL query and return the result as a local table
DB Readerread 2026-09-27Execute the incoming DB query and pull its result into a local table
DB Table Selectorread 2026-09-27Pick a table or view from a connection as the start of an in-database query
H2 Connectorread 2026-09-27Open a connection to an H2 database
KNIME Amazon Athena Connector (extension)read 2026-09-27Extension outside the base install: 1 current node: Amazon Athena Connector
KNIME Amazon DynamoDB Nodes (extension)read 2026-09-27Extension outside the base install: 11 current nodes: Amazon DynamoDB Batch Delete; Amazon DynamoDB Batch Get; Amazon DynamoDB Batch Put, …
KNIME Amazon Redshift Connector And Tools (extension)read 2026-09-27Extension outside the base install: 3 current nodes: Amazon Redshift Cluster Deleter; Amazon Redshift Cluster Launcher, …
KNIME Big Data Connectors (extension)read 2026-09-27Extension outside the base install: 4 current nodes: HDFS Connector; HDFS Connector (KNOX); Hive Connector; Impala Connector
KNIME BigQuery (extension)read 2026-09-27Extension outside the base install: 1 current node: Google BigQuery Connector
KNIME Databricks Integration (extension)read 2026-09-27Extension outside the base install: 6 current nodes: Databricks File System Connector; Databricks SQL Warehouse Connector, …
KNIME MongoDB Integration (extension)read 2026-09-27Extension outside the base install: 8 current nodes: MongoDB Aggregation; MongoDB Connector; MongoDB Reader; MongoDB Remove, …
KNIME Semantic Web (extension)read 2026-09-27Extension outside the base install: 13 current nodes: Memory Endpoint; SPARQL Delete; SPARQL Endpoint; SPARQL Executor, …
KNIME Snowflake Integration (extension)read 2026-09-27Extension outside the base install: 1 current node: Snowflake DB Connector
Memgraph extension (extension)read 2026-09-27Extension outside the base install: 3 current nodes: Memgraph Connection; Memgraph Reader; Memgraph Writer
Microsoft Access Connectorread 2026-09-27Open a connection to a Microsoft Access database file
Microsoft SQL Server Connectorread 2026-09-27Open a connection to Microsoft SQL Server
MySQL Connectorread 2026-09-27Open a connection to MySQL
Oracle Connectorread 2026-09-27Open a connection to Oracle
PostgreSQL Connectorread 2026-09-27Open a connection to PostgreSQL
SQLite Connectorread 2026-09-27Open a connection to a SQLite database file
Vertica Connectorread 2026-09-27Open a connection to Vertica
OpenRefine (1)
Database (SQL)read 2026-09-27Load the result of an SQL query from PostgreSQL, MySQL, MariaDB or SQLite, or from a local .db file
Pentaho Data Integration (12)
Cassandra Inputread 2026-09-27Read rows from a Cassandra column family
CouchDB Inputread 2026-09-27Read every document of a view in a CouchDB design document
HBase Inputread 2026-09-27Read rows from an HBase column family
LDAP Inputread 2026-09-27Read entries from an LDAP host
Microsoft Access Inputread 2026-09-27Read rows from a Microsoft Access file
Mondrian Inputread 2026-09-27Run an MDX query against a Mondrian OLAP server and return the result
MongoDB Inputread 2026-09-27Read the documents of a MongoDB collection
OLAP Inputread 2026-09-27Run an MDX query against any XML/A OLAP source through olap4j
Palo cell input (deprecated)read 2026-09-27Deprecated: read all cell data from a Palo OLAP cube
Palo dim input (deprecated)read 2026-09-27Deprecated: read the elements of a dimension in a Palo database
Splunk Inputread 2026-09-27Read data from Splunk
Table Inputread 2026-09-27Read rows from a database table
Polars (3)
Unity Catalog client (family)read 2026-09-2713 entries: Catalog with list_catalogs, list_namespaces, list_tables, get_table_info, scan_table, plus info classes
read_databaseread 2026-09-27Read the result of a SQL query through a connection object
read_database_uriread 2026-09-27Read the result of a SQL query from a database named by URI
Power Query M (2)
Analytical cube source functions (family)read 2026-09-274 functions listing OLAP cubes: AnalysisServices.Database, AnalysisServices.Databases, Essbase.Cubes, SapBusinessWarehouse.Cubes
Database connector functions (family)read 2026-09-2718 functions, one or more per database or driver: Sql.Database, Oracle.Database, PostgreSQL.Database, Odbc.Query, OleDb.DataSource
RapidMiner Studio (12)
Get Collection Info (Milvus)read 2026-09-27Fetch information about a collection in a Milvus vector database
Get Collection Info (Qdrant)read 2026-09-27Fetch information about a collection in a Qdrant vector database
Get Collections (Milvus)read 2026-09-27List the collections of a Milvus vector database
Get Collections (Qdrant)read 2026-09-27List the collections of a Qdrant vector database
Read Accessread 2026-09-27Read a table or query result from a Microsoft Access database file
Read Cassandraread 2026-09-27Read a Cassandra or Astra table into a table
Read Databaseread 2026-09-27Read a table or SQL query result from a JDBC database
Read MongoDBread 2026-09-27Read documents from a MongoDB collection
Retrieve (In Database)read 2026-09-27Select the source database table for an in-database chain
Search Solr (Data)read 2026-09-27Run a Solr search and return the hits as a table
Search Solr (Documents)read 2026-09-27Run a Solr search and return each hit as a text document
Search Splunkread 2026-09-27Run a search on a Splunk server and return the results as a table
Tableau Prep (3)
Built-in connectors (family)read 2026-09-27One connector per file type or server; count not stated, the list lives in the product
Custom connectorsread 2026-09-27Partner-built or Connector SDK connectors for ODBC- and JDBC-based data
Virtual Connectionsread 2026-09-27Read through a shared virtual connection, a central access point to data
Talend (6)
Database input components (family)read 2026-09-2763 components, one per database, reading rows by query: tMysqlInput, tOracleInput, tSnowflakeInput, tMongoDBInput
Database last insert id components (family)read 2026-09-274 components returning the key of the last inserted record: tDBLastInsertId, tMysqlLastInsertId, tMSSqlLastInsertId
Database lookup input components (family)read 2026-09-2711 components feeding lookup flows in Spark Streaming Jobs: tMysqlLookupInput, tOracleLookupInput, tJDBCLookupInput
Database unload and export components (family)read 2026-09-273 components exporting table data in bulk: tRedshiftUnload, tSAPHanaUnload, tTeradataFastExport
tSqoopImport (deprecated)read 2026-09-27Call Sqoop to transfer data from a relational database into HDFS
tSqoopImportAllTables (deprecated)read 2026-09-27Call Sqoop to transfer all tables of a database into HDFS
VisiData (1)
Database loaders (family)read 2026-09-238 loaders: sqlite, postgres, rds, mysql, and via the vdsql app (Ibis) bigquery, clickhouse, snowflake, sqlite
Background
A SQL SELECT statement retrieves zero or more rows from one or more database tables or views.[1] The first phase of extract, transform, load (ETL) extracts data from source systems, and relational databases are a common source format.[2]
When to use it
Without an ORDER BY clause, the order of rows returned by an SQL query is undefined.[1] Name an ORDER BY in the read itself whenever a later step depends on which row comes first. (Meridian's view)
Whether to do an operation in the database or outside it can involve a trade-off.[2] Removing duplicates with DISTINCT may be slow in the database, yet if it cuts the rows to be extracted a hundredfold it makes sense to do it there before unloading.[2] For better ETL performance, it may make sense to use a bulk unload instead of querying the database, to reduce the load on the source system.[2] Push filters and column choices into the read when they shrink what has to leave the database, and leave work the database does slowly for after the read. (Meridian's view)
Change data capture (CDC) is a set of software design patterns used to determine and track the data that has changed.[3] Change data capture can be used for incremental update of data loading.[3] One change data capture method uses a column holding each row's time of last change, treating a row as changed when that time is more recent than the last capture.[3] Apache NiFi's QueryDatabaseTable processor fetches the rows whose values in its Maximum Value columns are larger than the previously seen maxima.[4] Read only new or changed rows when a large table is read again on a schedule; read the whole table when it is small enough that a full reread costs little. (Meridian's view)
SQLite does not enforce column types, so a SQLite column declared INTEGER can hold the string 'hello'.[5] When DuckDB reads a SQLite column holding a value that does not fit the column's mapped type, it throws an error, which setting the sqlite_all_varchar option avoids.[5] Expect a weakly typed source to hold values its declared types do not promise, and check the types after the read rather than trusting the declaration. (Meridian's view)
The method
DuckDB's postgres extension reads data directly from a running PostgreSQL database instance, and can load data from PostgreSQL tables into DuckDB tables.[6] DuckDB's postgres extension has a pg_enable_filter_pushdown setting, on by default, that controls whether filter pushdown is used.[6]
In KNIME Analytics Platform, the DB Table Selector node outputs the database connection information together with a database query that defines the data in the database.[7] In KNIME Analytics Platform, the DB Reader node executes its input query in the database and retrieves the result into a KNIME data table.[8] Apache NiFi's QueryDatabaseTable processor streams its results, so arbitrarily large result sets are supported.[4]
Sources
- [1]Select (SQL) - Wikipediasecondary source
- [2]Extract, transform, load - Wikipediasecondary source
- [3]Change data capture - Wikipediasecondary source
- [4]QueryDatabaseTable - Apache NiFidocumentation
- [5]SQLite Extension – DuckDBdocumentation
- [6]PostgreSQL Extension – DuckDBdocumentation
- [7]DB Table Selectordocumentation
- [8]DB Readerdocumentation