Skip to main content

Daily production volumes

Daily production volumes​


1. Integration overview​

Dataset Name: Daily Production Volumes
Secure View: PRODUCTION_VOLUMES_DAILY_SV
Delivery Mechanism: Snowflake Secure View via Private Share
Update Pattern: Continuous Update
Export Trigger: None — this dataset is delivered continuously via the Apache Beam CDC pipeline, not on export.


2. Business context (Oil & Gas Reservoir Engineering)​

This dataset provides daily measured production volumes per well for standard phases (Oil/Gas/Water) plus tenant-configured custom streams.
It contains production-only fields and is exposed via a secure view that performs a direct pass-through (SELECT *) from the base table.


3. Dataset characteristics​

What this dataset is​

  • Entity grain: One record per well per production day (latest version).
  • Measures: Daily volumes (oil, gas, water, NGL), hours-on, pressures, injection rates, choke, and optional custom production streams.
  • Enrichment: Adds CHOSEN_ID, DATASOURCE, and PROJECT_NAME for client-friendly analysis and joins.

Mutable, near real-time dataset​

This dataset is mutable: records may be inserted, updated, or soft-deleted after their initial arrival.

Updates are delivered to Snowflake via an Apache Beam pipeline fed by MongoDB change data capture (CDC) from ComboCurve Main. When a change is made in ComboCurve Main, the corresponding change is typically reflected in Snowflake within ~1–3 minutes.

Soft deletes​

When a record is deleted in the source system (or suppressed for integration purposes), the dataset reflects that through the __SOFT_DELETE flag. Clients should filter __SOFT_DELETE = FALSE unless they explicitly want to track deletions.


4. Expected record uniqueness​

  • Technical uniqueness (as exposed by the secure view): WELL_ID + PRODUCTION_DATE
  • Business identity (recommended for client reporting): CHOSEN_ID + DATASOURCE + PROJECT_NAME + PRODUCTION_DATE

The secure view retains WELL_ID and PROJECT_ID for join-back to other ComboCurve entities while also providing CHOSEN_ID and DATASOURCE as stable identifiers for cross-system alignment.


5. Client access pattern​

Query the secure view directly:

  • Primary access object: PRODUCTION_VOLUMES_DAILY_SV
  • Typical filters:
    • __SOFT_DELETE = FALSE (exclude logically deleted records)
    • PRODUCTION_DATE date-range filters for incremental usage
  • Common joins:
    • Join to internal well headers via WELL_ID (already enriched with CHOSEN_ID, DATASOURCE)
    • Join to project analytics via PROJECT_ID or use PROJECT_NAME (already enriched)

Example:

SELECT *
FROM PRODUCTION_VOLUMES_DAILY_SV
WHERE __SOFT_DELETE = FALSE
AND PRODUCTION_DATE >= '2024-01-01';

Example usage patterns:

  • Time series analysis per well: group by CHOSEN_ID, DATASOURCE, order by PRODUCTION_DATE
  • Field-level dashboards: aggregate volumes by PROJECT_NAME, PRODUCTION_DATE

6. Full schema definition (client-facing secure view)​

The following schema reflects the client-facing secure view (PRODUCTION_VOLUMES_DAILY_SV). Columns are organized into data categories for easier discovery.

6.1 Well & project identity​

ColumnData TypeDescription
CHOSEN_IDVARCHARChosen ID from the well header
DATASOURCEVARCHARData source of the well
WELL_IDVARCHARIdentifier for the well (ObjectId reference)
PROJECT_IDVARCHARReference ID for the associated project
PROJECT_NAMEVARCHARName of the associated project
PRODUCTION_DATEDATECalendar date of production measurement

6.2 Production volumes & runtime​

ColumnData TypeDescription
OILFLOATOil production volume (BBL/Day)
GASFLOATGas production volume (MCF/Day)
WATERFLOATWater production volume (BBL/Day)
NGLFLOATNatural gas liquids production volume (BBL/Day)
HOURS_ONFLOATTotal hours the well was producing in a given day

6.3 Pressures​

ColumnData TypeDescription
BOTTOM_HOLE_PRESSUREFLOATBottom hole pressure (PSI)
CASING_HEAD_PRESSUREFLOATCasing head pressure (PSI)
FLOWLINE_PRESSUREFLOATFlowline pressure (PSI)
TUBING_HEAD_PRESSUREFLOATTubing head pressure (PSI)
VESSEL_SEPARATOR_PRESSUREFLOATSeparator vessel pressure (PSI)
GAS_LIFT_INJECTION_PRESSUREFLOATGas lift injection pressure (PSI)

6.4 Injection / EOR​

ColumnData TypeDescription
CO2_INJECTIONFLOATCO2 injection rate for EOR (MCF/Day)
GAS_INJECTIONFLOATGas injection volume for EOR (MCF/Day)
STEAM_INJECTIONFLOATSteam injection volume (MCF/Day) for EOR
WATER_INJECTIONFLOATWater injection volume (BBL/Day) for EOR

6.5 Operational controls & tags​

ColumnData TypeDescription
CHOKEFLOATChoke setting opening size used to regulate flow from the well
OPERATIONAL_TAGVARCHAROperational status tag (e.g., flowing, shut-in)

6.6 Custom production streams​

ColumnData TypeDescription
CUSTOM_NUMBER_0FLOATCustom production stream #0 (Unit/Day)
CUSTOM_NUMBER_1FLOATCustom production stream #1 (Unit/Day)
CUSTOM_NUMBER_2FLOATCustom production stream #2 (Unit/Day)
CUSTOM_NUMBER_3FLOATCustom production stream #3 (Unit/Day)
CUSTOM_NUMBER_4FLOATCustom production stream #4 (Unit/Day)
CUSTOM_NUMBER_5FLOATCustom production stream #5 (Unit/Day)
CUSTOM_NUMBER_6FLOATCustom production stream #6 (Unit/Day)
CUSTOM_NUMBER_7FLOATCustom production stream #7 (Unit/Day)
CUSTOM_NUMBER_8FLOATCustom production stream #8 (Unit/Day)
CUSTOM_NUMBER_9FLOATCustom production stream #9 (Unit/Day)
CUSTOM_NUMBER_10FLOATCustom production stream #10 (Unit/Day)
CUSTOM_NUMBER_11FLOATCustom production stream #11 (Unit/Day)
CUSTOM_NUMBER_12FLOATCustom production stream #12 (Unit/Day)
CUSTOM_NUMBER_13FLOATCustom production stream #13 (Unit/Day)
CUSTOM_NUMBER_14FLOATCustom production stream #14 (Unit/Day)
CUSTOM_NUMBER_15FLOATCustom production stream #15 (Unit/Day)
CUSTOM_NUMBER_16FLOATCustom production stream #16 (Unit/Day)
CUSTOM_NUMBER_17FLOATCustom production stream #17 (Unit/Day)
CUSTOM_NUMBER_18FLOATCustom production stream #18 (Unit/Day)
CUSTOM_NUMBER_19FLOATCustom production stream #19 (Unit/Day)

6.7 Record metadata & integration​

ColumnData TypeDescription
CREATED_ATTIMESTAMP_NTZ(9)Timestamp when the production record was created
UPDATED_ATTIMESTAMP_NTZ(9)Timestamp when the production record was last updated
__RECORD_SOURCEVARCHAROrigin of data
__CREATED_ATTIMESTAMP_NTZ(9)Timestamp when the record was created in the integration
__UPDATED_ATTIMESTAMP_NTZ(9)Integration updated date
__SOFT_DELETEBOOLEANIntegration soft delete

6.8 UI label mapping​

Most columns appear in the ComboCurve UI under a simple title-cased version of the column name (OIL → "Oil", BOTTOM_HOLE_PRESSURE → "Bottom Hole Pressure"). The exceptions and gotchas:

Watch out for these:

  • Injection streams are keyed in camelCase in the app. The columns are GAS_INJECTION, CO2_INJECTION, STEAM_INJECTION, and WATER_INJECTION (snake_case), but the app and forecast side key these streams as gasInjection, co2Injection, and so on. The visible labels ("Gas Injection", …) are otherwise predictable.
  • Uptime column differs by resolution. This daily dataset uses HOURS_ON; the monthly dataset uses DAYS_ON.
  • Custom streams are user-named. CUSTOM_NUMBER_{0–19} carries the company's user-defined stream label in the UI, not "Custom Number 0". (The forecast-volume datasets use the camelCase CUSTOMNUMBER{i} form for the same streams.)
Snowflake columnComboCurve UI label
PRODUCTION_DATEDate / Production Date
CUSTOM_NUMBER_0 … CUSTOM_NUMBER_19User-defined company stream label

7. Incremental consumption best practices​

Pull only new or changed records​

For scheduled ingestion, pull records where __UPDATED_AT is greater than your last successful ingestion watermark (and optionally include a small lookback window to capture late updates).

SELECT * FROM PRODUCTION_VOLUMES_DAILY_SV
WHERE __UPDATED_AT > '<last_watermark>' AND __SOFT_DELETE = FALSE;

Deduplicate by the secure-view key​

Even when consuming incrementally, treat WELL_ID + PRODUCTION_DATE as the record key and upsert accordingly. The secure view always resolves to the latest version for that key.


8. Operational notes​

  • Latest-row logic: The secure view selects the most recent record per WELL_ID + PRODUCTION_DATE or CHOSEN_ID + DATASOURCE + PROJECT_NAME + PRODUCTION_DATE using COALESCE(__UPDATED_AT, __CREATED_AT) ordering.
  • Late revisions: Production data can be corrected after initial availability; use incremental pulls driven by __UPDATED_AT and consider a small backfill window.
  • Null handling: Not all wells report every measure every day (pressures, injection, custom streams). Nulls may be expected.
  • Custom streams field: CUSTOM_XXXX_XX are optional “slots” for client- or source-specific production-related measures. Their meaning is tenant-dependent.