Download Discover Base Tables (DBTs) and Analytical Base Tables (ABTs)
You can use the eventData/dbtReport endpoint of the Download API to download the Discover Base Tables (DBTs) and Analytical Base Tables (ABTs):
- DBTs combine sets of information from different detail tables to create tables that you might find useful for analysis. Each DBT is created to provide you with one place to get the most relevant information about a specific subject. In addition, these tables are used to create the predefined reports that are available in SAS Customer Intelligence 360. For more information, see Discover Base Tables in SAS Customer Intelligence 360: Data Dictionary.
- ABTs contain data about
user behavior and help to analyze insights. For
more information, see Analytical Base Tables in SAS Customer Intelligence 360: Data Dictionary.
Note: In the API call, the user specifies start and end time periods for the data. However, hourly data is not available for ABTs because attribution data is available only on the 23rd hour of a given day. To include a specific day of data, include the 23rd hour of that day.
To download DBTs, you must have a license for SAS 360 Discover. To download ABTs, you must have a license for SAS 360 Discover or SAS 360 Engage.
- The downloaded data might contain
more columns than are documented in the Help Center or in the schema files.
These columns might have been introduced for internal consumption already
and will be added to a future version of the schema.
The same scenario can happen when you are not using the most recent schema. The data that you download always uses the columns from the latest schema, but you might have requested a schema version that has fewer columns.
- A schema might add columns to
tables, but the columns are not populated with data until a later release of
SAS Customer Intelligence
360. For example, a table in the current schema might have nine
columns, but data records populate only seven columns. When columns are
added but not yet populated with data, you can ignore these columns when you
process the data.
When SAS Customer Intelligence 360 is updated to populate these columns, you might need to wait 2–3 days before the data is populated in the downloaded tables.
To mitigate any issues, configure your ETL processes to allow for the physical files to have more columns than what is described in the JSON schema and the documentation.
To download data for the DBTs and the ABTs:
- Set up authorization for the REST
API. For REST API calls, in most situations the access point type is going
to be a General Access Point.
When you create the access point, make note of the value in the External gateway host field. Use this value when you see the variable <external gateway host> in the documentation.
- Send a GET call to the dbtReport endpoint to
retrieve a list of download URLs. This is a simple example of that call:
GET https://<external gateway host>/marketingGateway/discoverService/dataDownload/ eventData/dbtReport?schemaVersion=23Note: The files that are provided by the download links are delimited files that represent the structure of the tables from the schema that existed when those files were created. The download links are only to the tables of the schema that is requested, but the structure of those files conforms to the most recent schema version. For more information, see Schemas for Data Tables.This GET call can use these query parameters in the URL:
Query Parameters to Download Tables Name
Required or Optional
Data Type
Description
start
Optional
Integer
The start index of the items to return in the current response. The default value is
0.limit
Optional
Integer
The maximum number of items to return in the current response.
For the SAS Customer Intelligence 360 Download API, the limit parameter is restricted to a maximum value of
100. If you specify a value that is higher than the maximum, the limit is reset to the default value of20.When the count parameter (which is the total number of items that exist) is larger than the limit, the response returns only the first page of items in the response (or a specific page based on the start parameter). When results are paginated, the links in the response contain entries for the next, previous, and last pages of items that are available.
Tip Use the start and limit parameters to control the response based on your use case. If you want all of the items in a single response, set the limit parameter to a number that is equal to or above the total count.
However, if items in the response have a short-lived URL, you might want to set the limit to a smaller value. Then, you can process the smaller set of items before moving to the next page.
dataRangeStartTimeStamp
Optional
Timestamp
The start timestamp to use. The timestamp must be in UTC format, such as:
2026-01-09T00:00:00.000ZNote: To download data for an entire day (that is, starting at 12:00 AM), make sure that the digits for hour, minutes, and seconds are zeros.
dataRangeEndTimeStamp
Optional
Timestamp
The end timestamp to use. The timestamp must be in UTC format, such as:
2026-01-09T12:59:59.999ZThe value must be within 124 days of the value for the dataRangeStartTimeStamp parameter.
schemaVersion
Optional
Integer
The schema that the tables use. Use an integer that is
1or in the range3–23.The default value is
1, which is the schema that corresponds to the original data tables from SAS 360 Discover.Downloads with schema 4 and later are restricted by the values that are set for the category parameter. For more information, see Schemas for Data Tables.
- Download the tables from the JSON response.
These are the most relevant parts of the response:
- the top-level of the response includes the
start, count, and limit parameters. The count parameter displays the total number
of
items that are returned for the detail tables. The number of items in each response
is
based on the start value (which is zero-based) and the limit that you sent with the
request.
For example, assume that there are 200 total items returned. If the start value is
0, and the limit is10, the response includes items 1–9. To see the second page of responses, send another request with a start value of10and the same limit of10. The second response includes items 10–19. - the download URLs for each table are nested
in the top-level items object. See the following example for the structure of the
JSON
return and the URL location:
{ ... "start": 0, "count": 735, "items": [ { "dataRangeStartTimeStamp": "<timestamp>", "dataRangeEndTimeStamp": "<timestamp>", "schemaUrl": "<schema URL>", "schemaVersion": "23.0", "entities": [ { "entityName": "<table name>", "dataUrlDetails": [ { "url": "<temporary URL 1>", }, { "url": "<temporary URL 2>", }, ] }, ... More tables are listed here ... ] }, { "dataRangeStartTimeStamp": "<later start timestamp>", "dataRangeEndTimeStamp": "<later end timestamp>", ... } ] ... }If you plan to process the response programmatically, be aware of these considerations:
- In the
urlattribute, part of the download URL contains a datekey string that you can use to determine which files to download. The format for the string isdatekey%3D<datestamp><hour interval>/.For example:
"url": "https://<server>/4e36c3d7eac544c390afe528d340208a/dfs/data/dbt-report/DBT_CONTENT/datekey%3D2020100304/...Each table is partitioned into different hour intervals, which are represented by the last two digits of the datekey string.
- Aside from your pagination settings, the top-level items list is populated based on timestamps. For each list object in items, there is a set of entities (and entityName children) to loop through.
- For each entityName (table), there could be one or more URLs to process in the dataUrlDetails object.
- If you want to download the schema, you
need to download the schema only once. That is, you get the same schema file
regardless of which schemaUrl value you process.
Note: The response to REST API calls contains a URL to the schema that you requested, but the tables themselves contain columns that were introduced in later schemas.
- In the
- In rare situations, primary keys in downloaded
tables might not be unique. For example, this situation might occur from browser behavior
or
packet loss. Review these best practices to evaluate records with duplicate primary
keys:
- To avoid problems in on-site databases (or
when re-importing into SAS Customer Intelligence
360), import data by using an UPSERT method or sanitize your files to
ignore records when the primary key already exists.
When you use the UPSERT method, records are updated based on their primary keys and the value of the load_dttm column.
- If the primary keys and the values for the
load_dttm columns are the same, you can use the value of the other *_dttm column
(the DATETIME column that represents when the event occurred) to determine which
record is the most recent.
If two records are exactly the same, you can discard one of the records. SAS Customer Intelligence 360 is designed to ensure that events are not missed, so data collection is more permissive than restrictive. As a result, duplicate records cannot be completely avoided.
- In extract (_EXT) tables, duplicate records might exist based on a change in behavior. For more information, see this document: GCS Customer Notification Number: 2018-06 - 360 Discover EXT Changes (PDF).
- To avoid problems in on-site databases (or
when re-importing into SAS Customer Intelligence
360), import data by using an UPSERT method or sanitize your files to
ignore records when the primary key already exists.
- the top-level of the response includes the
start, count, and limit parameters. The count parameter displays the total number
of
items that are returned for the detail tables. The number of items in each response
is
based on the start value (which is zero-based) and the limit that you sent with the
request.