How it works
- Register each source table as a read-only application reference.
- The app computes a fingerprint from a consistent table snapshot.
- If the fingerprint differs from the value stored in Cord, the app serializes the snapshot as compressed Parquet and uploads it.
- Cord validates the upload and records the run status and row count.
Before you start
You need:- The private listing shared by Cord with your Snowflake account. Provide your Snowflake account identifier to your Cord account team to request access.
- A feed ID for each table and a project feed API key beginning with
dfk_. Obtain both from your Cord account team. - The ACCOUNTADMIN role, or assistance from a Snowflake administrator, to install the app and approve external network access.
Install the app
- In Snowsight, go to Data Products → Apps. The listing shared with your account appears there.
- Select it, then select Get.
- Name the app
CORD_DATA_FEEDSwhen prompted. The commands below use this application name. If you use a different name, replaceCORD_DATA_FEEDSin each command.
Set up
Step 1: Share tables with the app
Register each source table separately. Each registered table maps to one Cord feed. The following example registers two tables. Grant read access to each table:CONFIGURE_TABLE.
Step 2: Approve network access
Snowflake restricts external network access from Native Apps by default. An ACCOUNTADMIN must create a network rule and external access integration for the Cord API and Google Cloud Storage:Step 3: Add the project feed API key
SET_API_KEY replaces the current key.
Preview what Cord will receive
The preview procedures read the source table without accessing an external network. Return normalized sample rows. The procedure normalizes timestamps to UTC and serializes structured values as JSON:Push
Create a separate run for every configured table:"disposition": "upload_required"with"run_status": "succeeded"indicates that Cord received, validated, and published the table snapshot."disposition": "unchanged"indicates that the current fingerprint matches the value stored in Cord. The app skips the unload and upload operations for that table.
PUSH_ALL evaluates each table independently. Use the run_id from a result to retrieve its current status:
FAQ
What can the app see?
What can the app see?
The application receives read-only access to tables registered with
REGISTER_MULTI_REFERENCE. Remove a table configuration with CALL CORD_DATA_FEEDS.CONFIG.REMOVE_TABLE('PROD.SALES.ORDERS');.What data does the app send?
What data does the app send?
Each push sends a table fingerprint consisting of a hash and row count. When the fingerprint differs from the value stored in Cord, the app uploads the full table snapshot as compressed Parquet over HTTPS. Use
PREVIEW_NORMALIZED to inspect normalized sample rows.What operations run for an unchanged table?
What operations run for an unchanged table?
The app runs a fingerprint query in the Snowflake warehouse. If the fingerprint matches the value stored in Cord, the app does not unload or upload the table.
Does the app upload only changed rows?
Does the app upload only changed rows?
No. When the table fingerprint changes, the app uploads the full table snapshot. Cord compares the snapshot with the existing feed data.
What happens when upload validation fails?
What happens when upload validation fails?
Cord validates schemas, row counts, and checksums before publishing the snapshot. If validation fails, the run returns an error and Cord does not publish the snapshot.
How do I force a re-upload?
How do I force a re-upload?
Run
CALL CORD_DATA_FEEDS.CORE.PUSH_TABLE('PROD.SALES.ORDERS', 'live', TRUE);. The final TRUE bypasses the fingerprint match and requests an upload.How do I rotate my project feed API key?
How do I rotate my project feed API key?
Obtain a new project feed API key from your Cord account team. Run
SET_API_KEY with the new key, execute a push, and request revocation of the previous key.How do I schedule daily pushes?
How do I schedule daily pushes?
Create a Snowflake task with
CREATE TASK CORD_DAILY_PUSH SCHEDULE = 'USING CRON 0 6 * * * UTC' AS CALL CORD_DATA_FEEDS.CORE.PUSH_ALL();. Enable the task with ALTER TASK CORD_DAILY_PUSH RESUME;.How do I remove the application?
How do I remove the application?
Run
DROP APPLICATION CORD_DATA_FEEDS; to remove the application.