Skip to content
NetSuite Reference

systemnote2

transaction

The second-generation change log: the same field-level history as systemnote, but with the old and new values split into typed columns — string, numeric, date, boolean and reference — beside a UTC change timestamp.

Module: PlatformNo partition column
Grain note

the value columns are MUTUALLY EXCLUSIVE per row: valuedatatype names which typed pair is populated and the others are null, so a change history reads as a COALESCE over the typed columns, never as one column.

Notes

Browser page name is SystemNote2 (label "System Notes v2"). The grain is one row per logged CHANGE, as on systemnote: objectid repeats once per edit, so it is authored as a pointer rather than a key. Which of the two change logs an account populates is an account-level answer — check for rows in both before you pick one, and never assume the two are a complete history between them. timestamputc is UTC, unlike most stamps in this catalog, so it needs converting before it lines up with a local-time report. The page also carries reference-typed old/new values as two-part keys and a set of root-object key columns; both are left out of the curated field rows as plumbing rather than analysis columns.

What the badges mean
master
Data class: what the record holds — master data, transaction documents, control/configuration, or a documented convenience record. NetSuite has no product-family or schema axis, so this is the whole classification.

Structural facts — how the record is partitioned, not a trap by itself

Subsidiary-scoped
The record carries a subsidiary column that partitions its rows, so the generated SQL anchors it. On a few records the column is a multiselect rather than a scalar foreign key — the table notes say which (see the quirks guide).
Location-scoped
The record carries a location column — an org segment in NetSuite before it is a warehouse — and the generated SQL anchors it the same way.

Join & extract hazards — verify before you rely on this

View
A documented convenience record rather than a stored one. Land the records it stands in for instead of assuming it extracts as-is — the table notes say where the rows actually live.
In field listings, the Key chip marks a primary-key field, and the T/F chip marks a check-box column Connect returns as a 'T'/'F' string.

Fields

18 fields

18 fields.

Table fields: position, field name, description, data type, and flags. 18 fields.
#FieldDescriptionTypeFlags
1objectidInternal id of the object that changed — repeats once per logged changeNUMBER
2instancenameObject name as displayedVARCHAR
3objectelementnameElement that changed, by nameVARCHAR
4objectactiontypeAction performed on the object (internal id)NUMBER
5valuedatatypeWhich typed value pair below is populated (internal id) — the others are nullNUMBER
6valueoldstringOld value, string formVARCHAR
7valuenewstringNew value, string formVARCHAR
8valueolddisplaynameOld value as the UI displayed itVARCHAR
9valuenewdisplaynameNew value as the UI displayed itVARCHAR
10valueoldnumberOld value, numeric form — no casting needed, unlike systemnoteNUMBER
11valuenewnumberNew value, numeric formNUMBER
12valueolddateOld value, date formTIMESTAMP
13valuenewdateNew value, date formTIMESTAMP
14valueoldbooleanOld value, boolean formVARCHAR
15valuenewbooleanNew value, boolean formVARCHAR
16actorWho made the change (internal id)NUMBER
17contextContext the change came from (internal id) — UI, CSV, scriptNUMBER
18timestamputcWhen the change was made, in UTCTIMESTAMP
The record's primary analysis date — a real DATE/TIMESTAMP column, no conversion needed

Field provenance: hand-curated.

Boilerplate SQL

Starting point for reading the Connect-landed copy of systemnote2 on Databricks — dates are real DATE/TIMESTAMP columns and need no conversion, and the partition anchors are already in place. This record carries no modification stamp, and the snippet says so where the watermark would otherwise go. Set your Unity Catalog location, schema, and filter values below; they’re substituted into the SQL and the copy button.

Query parameters

4 parameters not filled: <catalog>, <schema>, <DATE_FROM>, <DATE_TO>

-- ============================================================
-- Table  : systemnote2 — The second-generation change log: the same field-level history as systemnote, but with the old and new values split into typed columns — string, numeric, date, boolean and reference — beside a UTC change timestamp.
-- Purpose: Column-selected read of systemnote2 — auto-generated from field metadata
-- Grain  : One row per record — see the Fields section for the full key
-- Caution: the value columns are MUTUALLY EXCLUSIVE per row: valuedatatype names which typed pair is populated and the others are null, so a change history reads as a COALESCE over the typed columns, never as one column.
-- Notes  : Auto-generated skeleton for NetSuite data landed in your lakehouse from a SuiteAnalytics Connect (or SuiteQL) extract — it never addresses live NetSuite. Identifiers are lowercase as NetSuite2.com renders them. Select-type columns hold numeric internal ids: BUILTIN.DF() display resolution exists only at extraction time, so decode ids by joining the landed list records; see quirks #display-values. Check-box columns arrive as 'T'/'F' strings; see quirks #tf-booleans.
-- ============================================================
SELECT
  t.objectid AS "Internal id of the object that changed — repeats once per logged change",
  t.instancename AS "Object name as displayed",
  t.objectelementname AS "Element that changed, by name",
  t.objectactiontype AS "Action performed on the object (internal id)",
  t.valuedatatype AS "Which typed value pair below is populated (internal id) — the others are null",
  t.valueoldstring AS "Old value, string form",
  t.valuenewstring AS "New value, string form",
  t.valueolddisplayname AS "Old value as the UI displayed it",
  t.valuenewdisplayname AS "New value as the UI displayed it",
  t.valueoldnumber AS "Old value, numeric form — no casting needed, unlike systemnote",
  t.valuenewnumber AS "New value, numeric form",
  t.valueolddate AS "Old value, date form",
  t.valuenewdate AS "New value, date form",
  t.valueoldboolean AS "Old value, boolean form",  -- 'T'/'F' string — compare = 'T', or CAST via CASE; see quirks #tf-booleans
  t.valuenewboolean AS "New value, boolean form",  -- 'T'/'F' string — compare = 'T', or CAST via CASE; see quirks #tf-booleans
  t.actor AS "Who made the change (internal id)",
  t.context AS "Context the change came from (internal id) — UI, CSV, script",
  t.timestamputc AS "When the change was made, in UTC"
FROM <catalog>.<schema>.systemnote2 t
WHERE
  1 = 1  -- no partition column on this record; the filters below are optional
  -- AND t.timestamputc >= TIMESTAMP '<DATE_FROM>'
  -- AND t.timestamputc <= TIMESTAMP '<DATE_TO>'
  -- no lastmodifieddate on this record — there is no watermark column, so incremental extraction must full-refresh it (see quirks #deletes)
;

Verified August 2026 · Analytics Browser 2021.1 · corroborated 2025.2

Select columns hold internal ids, not display text — see decoding display values.

Relationships

Diagram of 1-hop neighbors — join details below. Document-link edges are highlighted; they chain one document to the next and are the joins newcomers most often get wrong.

Browse more Platform tables

More Platform tables

Maintained by Summit Analytics, a supply chain analytics practice. The tools and references are free — the consulting is selective.

Part of the Summit Analytics reference library.

Work with the practice

Not affiliated with or endorsed by Oracle or NetSuite. NetSuite is a registered trademark of Oracle and/or its affiliates.