Monthly production volumes
Monthly production volumes
1. Integration overview
Dataset Name: Monthly Production Volumes
Secure View: PRODUCTION_VOLUMES_MONTHLY_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 monthly 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 month (latest version).
- Measures: Monthly volumes (oil, gas, water, NGL), days-on, injection rates, choke, and optional custom production streams.
- Enrichment: Adds
CHOSEN_ID,DATASOURCE, andPROJECT_NAMEfor 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_MONTHLY_SV - Typical filters:
__SOFT_DELETE = FALSE(exclude logically deleted records)PRODUCTION_DATEdate-range filters for incremental usage
- Common joins:
- Join to internal well headers via
WELL_ID(already enriched withCHOSEN_ID,DATASOURCE) - Join to project analytics via
PROJECT_IDor usePROJECT_NAME(already enriched)
- Join to internal well headers via
Example:
SELECT *
FROM PRODUCTION_VOLUMES_MONTHLY_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 byPRODUCTION_DATE - Field-level dashboards: aggregate volumes by
PROJECT_NAME,PRODUCTION_DATE
6. Full schema definition (client-facing secure view)
Below is the schema for PRODUCTION_VOLUMES_MONTHLY_SV, broken into data categories for easier consumption.
6.1 Well & project identity
| Column | Data Type | Description |
|---|---|---|
| WELL_ID | VARCHAR | Identifier for the well (ObjectId reference) |
| CHOSEN_ID | VARCHAR | Chosen ID from the well header |
| DATASOURCE | VARCHAR | Data source of the well |
| PROJECT_ID | VARCHAR | Reference ID for the associated project |
| PROJECT_NAME | VARCHAR | Name of the associated project |
6.2 Production timing & runtime
| Column | Data Type | Description |
|---|---|---|
| PRODUCTION_DATE | DATE | Calendar date of production measurement (YYYY-MM-DD) |
| DAYS_ON | NUMBER | Total days the well was in production in a given month |
6.3 Production volumes
| Column | Data Type | Description |
|---|---|---|
| OIL | FLOAT | Oil production volume (BBL/Month) |
| GAS | FLOAT | Gas production volume (MCF/Month) |
| WATER | FLOAT | Water production volume (BBL/Month) |
| NGL | FLOAT | Natural gas liquids production volume (BBL/Month) |
6.4 Injection & EOR volumes
| Column | Data Type | Description |
|---|---|---|
| CO2_INJECTION | FLOAT | CO2 injection volume for EOR (MCF/Month) |
| GAS_INJECTION | FLOAT | Gas injection volume for EOR (MCF/Month) |
| WATER_INJECTION | FLOAT | Water injection volume (BBL/Month) for EOR |
| STEAM_INJECTION | FLOAT | Steam injection volume (MCF/Month) for EOR |
6.5 Operations & controls
| Column | Data Type | Description |
|---|---|---|
| CHOKE | FLOAT | Choke setting opening size used to regulate flow from the well |
| OPERATIONAL_TAG | VARCHAR | Operational status tag (e.g., flowing, shut-in) |
6.6 Custom production streams
| Column | Data Type | Description |
|---|---|---|
| CUSTOM_NUMBER_0 | FLOAT | Custom production stream #0 (Unit/Month) |
| CUSTOM_NUMBER_1 | FLOAT | Custom production stream #1 (Unit/Month) |
| CUSTOM_NUMBER_2 | FLOAT | Custom production stream #2 (Unit/Month) |
| CUSTOM_NUMBER_3 | FLOAT | Custom production stream #3 (Unit/Month) |
| CUSTOM_NUMBER_4 | FLOAT | Custom production stream #4 (Unit/Month) |
| CUSTOM_NUMBER_5 | FLOAT | Custom production stream #5 (Unit/Month) |
| CUSTOM_NUMBER_6 | FLOAT | Custom production stream #6 (Unit/Month) |
| CUSTOM_NUMBER_7 | FLOAT | Custom production stream #7 (Unit/Month) |
| CUSTOM_NUMBER_8 | FLOAT | Custom production stream #8 (Unit/Month) |
| CUSTOM_NUMBER_9 | FLOAT | Custom production stream #9 (Unit/Month) |
| CUSTOM_NUMBER_10 | FLOAT | Custom production stream #10 (Unit/Month) |
| CUSTOM_NUMBER_11 | FLOAT | Custom production stream #11 (Unit/Month) |
| CUSTOM_NUMBER_12 | FLOAT | Custom production stream #12 (Unit/Month) |
| CUSTOM_NUMBER_13 | FLOAT | Custom production stream #13 (Unit/Month) |
| CUSTOM_NUMBER_14 | FLOAT | Custom production stream #14 (Unit/Month) |
| CUSTOM_NUMBER_15 | FLOAT | Custom production stream #15 (Unit/Month) |
| CUSTOM_NUMBER_16 | FLOAT | Custom production stream #16 (Unit/Month) |
| CUSTOM_NUMBER_17 | FLOAT | Custom production stream #17 (Unit/Month) |
| CUSTOM_NUMBER_18 | FLOAT | Custom production stream #18 (Unit/Month) |
| CUSTOM_NUMBER_19 | FLOAT | Custom production stream #19 (Unit/Month) |
6.7 Record metadata & integration fields
| Column | Data Type | Description |
|---|---|---|
| CREATED_AT | TIMESTAMP | Timestamp when the production record was created |
| UPDATED_AT | TIMESTAMP | Timestamp when the production record was last updated |
| __RECORD_SOURCE | VARCHAR | Indicates if data was originated in ComboCurve or your org |
| __CREATED_AT | TIMESTAMP | Integration creation date |
| __UPDATED_AT | TIMESTAMP | Integration updated date |
| __SOFT_DELETE | BOOLEAN | Integration 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, andWATER_INJECTION(snake_case), but the app and forecast side key these streams asgasInjection,co2Injection, and so on. The visible labels ("Gas Injection", …) are otherwise predictable.- Uptime column differs by resolution. This monthly dataset uses
DAYS_ON; the daily dataset usesHOURS_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 camelCaseCUSTOMNUMBER{i}form for the same streams.)
| Snowflake column | ComboCurve UI label |
|---|---|
| PRODUCTION_DATE | Date / Production Date |
| CUSTOM_NUMBER_0 … CUSTOM_NUMBER_19 | User-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_MONTHLY_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_DATEorCHOSEN_ID+DATASOURCE+PROJECT_NAME+PRODUCTION_DATEusingCOALESCE(__UPDATED_AT, __CREATED_AT)ordering. - Late revisions: Production data can be corrected after initial availability; use incremental pulls driven by
__UPDATED_ATand consider a small backfill window. - Null handling: Not all wells report every measure every month (pressures, injection, custom streams). Nulls may be expected.
- Custom streams field:
CUSTOM_XXXX_XXare optional “slots” for client- or source-specific production-related measures. Their meaning is tenant-dependent.