Moving your business off an older system like Oracle NetSuite and onto software you own on Google Cloud sounds risky. Most people worry about getting the data out cleanly. The real headaches, though, are that the old vendor’s system hands data over slowly and limits how much you can pull at once.
At Infinary, we don’t rely on the usual export-to-spreadsheet, re-import-by-hand routine. We treat the move as an engineering job: carefully moving your data across, cleaning it up, with nothing lost.
Getting the Data Out Faster
NetSuite’s standard way of handing over data is slow and capped. To move very large amounts of data — we’re talking terabytes — we use a faster method called SuiteQL that lets us query NetSuite’s records directly. That pulls your data out in a clean format and sends it straight to a small Google Cloud service (Cloud Run) that tidies it up.
Cleaning Up the Data Along the Way
We run a small program on Cloud Run that does three things to your data:
- Tidying the labels: turning NetSuite’s internal codes into clear, readable names that the new software understands.
- Matching the structure: lining up NetSuite’s way of organizing records with the way the all-in-one business software organizes them.
- Packing it efficiently: saving the cleaned-up records in a compact format (Apache Parquet) so we can double-check everything is correct before the final load.
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
def normalize_and_store(json_data, destination_path):
# Match NetSuite's internal codes to the new software's fields
mapping_schema = {
'entity': 'supplier',
'trandate': 'posting_date',
'memo': 'remarks',
'amount': 'base_grand_total'
}
df = pd.DataFrame(json_data)
df = df.rename(columns=mapping_schema)
# Set the right data types so every value checks out
df['posting_date'] = pd.to_datetime(df['posting_date'])
# Save in a compact format so we can double-check before loading
table = pa.Table.from_pandas(df)
pq.write_table(table, destination_path, compression='snappy')
return f"Serialized {len(df)} records to {destination_path}"
Loading It in All at Once
For the final step, we skip the slow record-by-record approach entirely. Instead, we load the data straight into the new system’s database, all prepared inside your own private, walled-off section of Google Cloud. That lets us load millions of records in a small fraction of the time it would take to add them one at a time.
So when we flip the switch, your business is up and running on a fast system you own outright — one that’s built better than the old setup it replaced.
Infinary Engineering Group