PMS_GROUPNMI
Describe the NMIs that a group uses to provide its service
Column Schema
GROUPNMIID
Record Identifier of the NMI within a Group. When data is updated, existing record identifier is terminated, and new record identifier(s) are allocated.
SQL Type: NUMBER(20,0)
Polars Type: pl.Int128
This column is mandatory, and a primary key.
APPROVEDDATE
Date which this record was approved
SQL Type: TIMESTAMP(3)
Polars Type: pl.Datetime()
This column is not mandatory.
Unlike most datetime columns, this one includes a millisecond component.
e.g. 2029/03/15 00:00:00.123.
BASELINEMETHODOLOGYID
Baseline methodology to be used for the PoL and Baseline assessment of the NMI
SQL Type: VARCHAR2(50)
Polars Type: str
This column is not mandatory.
ENDDATE
Date for which this version is effective to. Will be set to current day plus one if it is the current active record or past date if the record has been superseded/ended.
SQL Type: TIMESTAMP(3)
Polars Type: pl.Datetime()
This column is not mandatory.
Unlike most datetime columns, this one includes a millisecond component.
e.g. 2029/03/15 00:00:00.123.
GROUPID
Group id of the Group which the NMI belongs in.
SQL Type: NUMBER(20,0)
Polars Type: pl.Int128
This column is not mandatory.
LASTCHANGED
Date time which record was last changed
For more information, see the dedicated documentation page.
SQL Type: TIMESTAMP(3)
Polars Type: pl.Datetime()
This column is not mandatory.
Unlike most datetime columns, this one includes a millisecond component.
e.g. 2029/03/15 00:00:00.123.
MRC
Maximum responsive component for the NMI
SQL Type: NUMBER(10,3)
Polars Type: pl.Float64
This column is not mandatory.
MRCREASON
Reason for the MRC
SQL Type: VARCHAR2(500)
Polars Type: str
This column is not mandatory.
NERRGROUPPREMISES
Specifies whether NMI is in a NERR aggregated premises (TRUE = 1/FALSE = 0)
SQL Type: NUMBER(1,0)
Polars Type: pl.Int8
This column is not mandatory.
NMI
National Meter Identifier linked to the group.
SQL Type: VARCHAR2(20)
Polars Type: str
This column is not mandatory.
RETAILCUSTOMER
Retail customer of the NMI
SQL Type: VARCHAR2(50)
Polars Type: str
This column is not mandatory.
SITENAME
Site name
SQL Type: VARCHAR2(50)
Polars Type: str
This column is not mandatory.
STARTDATE
Effective date of when this service started operation
SQL Type: TIMESTAMP(3)
Polars Type: pl.Datetime()
This column is not mandatory.
Unlike most datetime columns, this one includes a millisecond component.
e.g. 2029/03/15 00:00:00.123.
SUSPENDED
Indicates whether the NMI has been suspended from use. (TRUE = 1/FALSE = 0)
SQL Type: NUMBER(1,0)
Polars Type: pl.Int8
This column is not mandatory.
UNAVAILABLE
Indicates whether the NMI is unavailable for use. (TRUE = 1/FALSE = 0)
SQL Type: NUMBER(1,0)
Polars Type: pl.Int8
This column is not mandatory.
VERSIONFROM
Date for which this version is effective from
SQL Type: TIMESTAMP(3)
Polars Type: pl.Datetime()
This column is not mandatory.
Unlike most datetime columns, this one includes a millisecond component.
e.g. 2029/03/15 00:00:00.123.
VERSIONTO
Date for which this version is effective to. Will be set to current day plus one if it is the current active record or past date if the record has been superseded/ended.
SQL Type: TIMESTAMP(3)
Polars Type: pl.Datetime()
This column is not mandatory.
Unlike most datetime columns, this one includes a millisecond component.
e.g. 2029/03/15 00:00:00.123.
New Data Timing
When the NMIs are created or updated
Code Examples
Polars
Casting is enums, categoricals etc is not essential, but may speed up parsing.
Swapping int for pl.UInt16, pl.Int32 would also speed up parsing. However some of the datatypes are inferred, so they may be wrong.
This code deduplicates for you. Deduplication is normally only required across multiple months.
This code assumes that all columns are present, which may not be true for older files.
import polars as pl
import polars.selectors as cs
# for "TIMESTAMP" columns
# Note that Polars uses slightly different format strings for fractional seconds to `dt.strptime`
# e.g. "2029/03/15 00:00:00.123".
dt_ms_fmt = "%Y/%m/%d %H:%M:%S%.3f"
csv_paths = ["SOMEFILE.CSV", "OTHERFILE.CSV"]
lf = (
pl.concat(
[
pl.scan_csv(
csv_path, # must be unzipped beforehand
skip_rows=1, # skip the header
infer_schema=False, # much faster
)
.filter(cs.by_index(0) == "D") # drop the footer
.select(~cs.by_index(range(4))) # drop metadata columns
for csv_path in csv_paths
],
how="diagonal_relaxed",
)
.with_columns(
pl.col(
"APPROVEDDATE",
"ENDDATE",
"LASTCHANGED",
"STARTDATE",
"VERSIONFROM",
"VERSIONTO",
).str.strptime(pl.Datetime, dt_ms_fmt),
)
.cast(
{
"GROUPNMIID": int, # or pl.Int128
"BASELINEMETHODOLOGYID": str,
"GROUPID": int, # or pl.Int128
"MRC": pl.Float64,
"MRCREASON": str,
"NERRGROUPPREMISES": int, # or pl.Int8
"NMI": str,
"RETAILCUSTOMER": str,
"SITENAME": str,
"SUSPENDED": int, # or pl.Int8
"UNAVAILABLE": int, # or pl.Int8
}
)
# Deduplicate
# We want one row per ['GROUPNMIID']
# Tie-breaker: greatest value of ['GROUPID', 'NMI']
.sort(["GROUPID", "NMI"], descending=False)
.unique(subset=["GROUPNMIID"], keep="last")
)
Nemosis
This table is not yet available in Nemosis.
Availability
Visibility: Private
This table is not available in the public monthly MMSDM archive. Is is only available to registered market participants over FTP inside a VPN.
Deduplication and PDR Loader Configuration
The primary keys are:
The transaction type is "UPDATE-INSERT", which means that you will likely see duplicate data with different values.
You should deduplicate by sorting based on LASTCHANGED, within each group of primary keys.
| Report Name | Report Subtype | Version |
|---|---|---|
| PARTICIPANT_REGISTRATION | PMS_GROUPNMI | 1 |
This means that the CSV files start with metadata columns:
ROW_FILTER_TYPE is LASTCHANGED
Indexes
Links
This page as JSON (schema documented here, but may change)
Download a JSON Schema specification for this table.
Official AEMO schema documentation
Other Information
Package: PARTICIPANT_REGISTRATION