diff --git a/clickstream-ai-recommendation/README.md b/clickstream-ai-recommendation/README.md index 7266a7d4..cc2723f0 100644 --- a/clickstream-ai-recommendation/README.md +++ b/clickstream-ai-recommendation/README.md @@ -36,7 +36,7 @@ mutation { } } ``` -You can find more content samples to add in the [sample_content.jsonl](content-api/sample_content.jsonl) file. +You can find more content samples to add in the [sample_content.jsonl](connectors/testdata/sample_content.jsonl) file. Once you have added multiple pieces of content, we can register clicks with this mutation: ```graphql @@ -85,10 +85,10 @@ docker run -it -p 8081:8081 -p 8888:8888 -p 9092:9092 --rm -v $PWD:/build -e OPE 1. Once everything is started, open another terminal window to add data to Kafka using the load_data.py script in the `yourdata-files` directory. This requires **kafka-python-ng** installed via `pip3 install kafka-python-ng`. -1. Load the content data: `python3 load_data.py content.json.gz localhost:9092 content --msg 50`. +2. Load the content data: `python3 load_data.py content.json.gz localhost:9092 content --msg 50`. Wait until it finishes, which takes about two minutes. Check the Flink Dashboard running at http://localhost:8081/ to see the progress. Wait until the task turns blue again. -1. Load the clickstream +3. Load the clickstream data: `python3 load_data.py clickstream.json.gz localhost:9092 clickstream --msg 100`. This loads 100 clicks per second. Wait a few seconds for some data to load. Let this run in the background until it finishes (about 4 minutes). diff --git a/clickstream-ai-recommendation/clickstream-api/clickstream.table.sql b/clickstream-ai-recommendation/clickstream-api/clickstream.table.sql deleted file mode 100644 index 23a7bebf..00000000 --- a/clickstream-ai-recommendation/clickstream-api/clickstream.table.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE Clickstream ( - url STRING NOT NULL, - userid STRING NOT NULL, - event_time TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp' -); diff --git a/clickstream-ai-recommendation/clickstream-kafka/clickstream.table.sql b/clickstream-ai-recommendation/clickstream-kafka/clickstream.table.sql deleted file mode 100644 index 37ff5596..00000000 --- a/clickstream-ai-recommendation/clickstream-kafka/clickstream.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE Clickstream ( - url STRING NOT NULL, - userid STRING NOT NULL, - event_time TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - WATERMARK FOR event_time AS event_time - INTERVAL '0.001' SECOND -) WITH ( - 'connector' = 'kafka', - 'topic' = 'clickstream', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'clickstream-group', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'format' = 'flexible-json' -); diff --git a/clickstream-ai-recommendation/connectors/sources-api.sqrl b/clickstream-ai-recommendation/connectors/sources-api.sqrl new file mode 100644 index 00000000..350e95de --- /dev/null +++ b/clickstream-ai-recommendation/connectors/sources-api.sqrl @@ -0,0 +1,12 @@ +CREATE TABLE _Clickstream ( + url STRING NOT NULL, + userid STRING NOT NULL, + event_time TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp' +); + +CREATE TABLE _Content ( + url STRING NOT NULL, + title STRING NOT NULL, + text STRING NOT NULL, + update_time TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp' +) diff --git a/clickstream-ai-recommendation/connectors/sources-kafka.sqrl b/clickstream-ai-recommendation/connectors/sources-kafka.sqrl new file mode 100644 index 00000000..be338d16 --- /dev/null +++ b/clickstream-ai-recommendation/connectors/sources-kafka.sqrl @@ -0,0 +1,30 @@ +CREATE TABLE _Clickstream ( + url STRING NOT NULL, + userid STRING NOT NULL, + event_time TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + WATERMARK FOR event_time AS event_time - INTERVAL '0.001' SECOND +) WITH ( + 'connector' = 'kafka', + 'topic' = 'clickstream', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'clickstream-group', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'format' = 'flexible-json' + ); + +CREATE TABLE _Content ( + url STRING NOT NULL, + title STRING NOT NULL, + text STRING NOT NULL, + update_time TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + WATERMARK FOR update_time AS update_time - INTERVAL '0.001' SECOND +) WITH ( + 'connector' = 'kafka', + 'topic' = 'content', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'clickstream-group', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'format' = 'flexible-json' + ); diff --git a/clickstream-ai-recommendation/content-api/sample_content.jsonl b/clickstream-ai-recommendation/connectors/testdata/sample_content.jsonl similarity index 100% rename from clickstream-ai-recommendation/content-api/sample_content.jsonl rename to clickstream-ai-recommendation/connectors/testdata/sample_content.jsonl diff --git a/clickstream-ai-recommendation/content-api/.nodiscovery b/clickstream-ai-recommendation/content-api/.nodiscovery deleted file mode 100644 index e69de29b..00000000 diff --git a/clickstream-ai-recommendation/content-api/content.table.sql b/clickstream-ai-recommendation/content-api/content.table.sql deleted file mode 100644 index 49c0ecb5..00000000 --- a/clickstream-ai-recommendation/content-api/content.table.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE Content ( - url STRING NOT NULL, - title STRING NOT NULL, - text STRING NOT NULL, - update_time TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp' -) \ No newline at end of file diff --git a/clickstream-ai-recommendation/content-kafka/content.table.sql b/clickstream-ai-recommendation/content-kafka/content.table.sql deleted file mode 100644 index 9ad91b04..00000000 --- a/clickstream-ai-recommendation/content-kafka/content.table.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE Content ( - url STRING NOT NULL, - title STRING NOT NULL, - text STRING NOT NULL, - update_time TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - WATERMARK FOR update_time AS update_time - INTERVAL '0.001' SECOND -) WITH ( - 'connector' = 'kafka', - 'topic' = 'content', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'clickstream-group', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'format' = 'flexible-json' - ); diff --git a/clickstream-ai-recommendation/recommendation.sqrl b/clickstream-ai-recommendation/recommendation.sqrl index 3e84765c..f3910567 100644 --- a/clickstream-ai-recommendation/recommendation.sqrl +++ b/clickstream-ai-recommendation/recommendation.sqrl @@ -1,13 +1,9 @@ -/*+no_query */ -IMPORT clickstream-{{variant}}.clickstream; - -/*+no_query */ -IMPORT content-{{variant}}.content; +IMPORT connectors.sources-{{variant}} AS sources; /* Find next page visits within 10 minutes */ _CoVisits := SELECT b.url AS beforeURL, a.url AS afterURL, a.event_time AS `timestamp` - FROM Clickstream b INNER JOIN Clickstream a ON b.userid=a.userid + FROM sources._Clickstream b INNER JOIN sources._Clickstream a ON b.userid=a.userid AND b.event_time < a.event_time AND b.event_time >= a.event_time - INTERVAL 10 MINUTE; /* Recommend pages that are visited shortly after */ @@ -19,14 +15,14 @@ Recommendation := SELECT beforeURL AS url, afterURL AS recommendation, IMPORT stdlib.openai.vector_embed; -_ContentEmbedding := SELECT *, vector_embed(text, 'text-embedding-3-small') AS embedding FROM Content; +_ContentEmbedding := SELECT *, vector_embed(text, 'text-embedding-3-small') AS embedding FROM sources._Content; EXPORT _ContentEmbedding TO logger.content; /*+vector_dim(embedding, 1536), index(VECTOR_COSINE, embedding) */ _DistinctContent := DISTINCT _ContentEmbedding ON url ORDER BY update_time DESC; -_UserInterest := SELECT userid, CENTER(embedding) AS interest FROM Clickstream click +_UserInterest := SELECT userid, CENTER(embedding) AS interest FROM sources._Clickstream click JOIN _DistinctContent FOR SYSTEM_TIME AS OF click.event_time content ON content.url = click.url GROUP BY userid; diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/README.md b/finance-credit-card-chatbot/credit-card-analytics/connectors/README.md similarity index 100% rename from finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/README.md rename to finance-credit-card-chatbot/credit-card-analytics/connectors/README.md diff --git a/finance-credit-card-chatbot/credit-card-analytics/connectors/sources-kafka.sqrl b/finance-credit-card-chatbot/credit-card-analytics/connectors/sources-kafka.sqrl new file mode 100644 index 00000000..64bbd63d --- /dev/null +++ b/finance-credit-card-chatbot/credit-card-analytics/connectors/sources-kafka.sqrl @@ -0,0 +1,69 @@ +CREATE TABLE CardAssignment ( + customerId BIGINT NOT NULL, + cardNo STRING NOT NULL, + cardType STRING NOT NULL, + `timestamp` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '1' SECOND +) WITH ( + 'connector' = 'kafka', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'mygroupid', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'value.format' = 'flexible-json', + 'topic' = 'cardassignment' + ); + +CREATE TABLE Merchant ( + merchantId BIGINT NOT NULL, + name STRING NOT NULL, + category STRING NOT NULL, + updatedTime TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND +) WITH ( + 'connector' = 'kafka', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'mygroupid', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'value.format' = 'flexible-json', + 'topic' = 'merchant' + ); + + +CREATE TABLE MerchantReward ( + merchantId BIGINT NOT NULL, + rewardsByCard ARRAY> NOT NULL, + updatedTime TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND +) WITH ( + 'connector' = 'kafka', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'mygroupid', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'value.format' = 'flexible-json', + 'topic' = 'merchantreward' + ); + +CREATE TABLE Transaction ( + transactionId BIGINT NOT NULL, + cardNo STRING NOT NULL, + `time` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + amount DOUBLE NOT NULL, + merchantId BIGINT NOT NULL, + WATERMARK FOR `time` AS `time` - INTERVAL '1' SECOND +) WITH ( + 'connector' = 'kafka', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'mygroupid', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'value.format' = 'flexible-json', + 'topic' = 'transaction' + ); diff --git a/finance-credit-card-chatbot/credit-card-analytics/connectors/sources-testdata.sqrl b/finance-credit-card-chatbot/credit-card-analytics/connectors/sources-testdata.sqrl new file mode 100644 index 00000000..562a509c --- /dev/null +++ b/finance-credit-card-chatbot/credit-card-analytics/connectors/sources-testdata.sqrl @@ -0,0 +1,55 @@ +CREATE TABLE CardAssignment ( + customerId BIGINT NOT NULL, + cardNo STRING NOT NULL, + cardType STRING NOT NULL, + `timestamp` TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`customerId`, `cardNo`, `timestamp`) NOT ENFORCED, + WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '1' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/card_assignment.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE Merchant ( + merchantId BIGINT NOT NULL, + name STRING NOT NULL, + category STRING NOT NULL, + updatedTime TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`merchantId`, `updatedTime`) NOT ENFORCED, + WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/merchant.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE MerchantReward ( + merchantId BIGINT NOT NULL, + rewardsByCard ARRAY> NOT NULL, + updatedTime TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`merchantId`, `updatedTime`) NOT ENFORCED, + WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/merchant_reward.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE Transaction ( + transactionId BIGINT NOT NULL, + cardNo STRING NOT NULL, + `time` TIMESTAMP_LTZ(3) NOT NULL, + amount DOUBLE NOT NULL, + merchantId BIGINT NOT NULL, + PRIMARY KEY (`transactionId`, `time`) NOT ENFORCED, + WATERMARK FOR `time` AS `time` - INTERVAL '1' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/transaction.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/card_assignment.jsonl b/finance-credit-card-chatbot/credit-card-analytics/connectors/testdata/card_assignment.jsonl similarity index 100% rename from finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/card_assignment.jsonl rename to finance-credit-card-chatbot/credit-card-analytics/connectors/testdata/card_assignment.jsonl diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/merchant.jsonl b/finance-credit-card-chatbot/credit-card-analytics/connectors/testdata/merchant.jsonl similarity index 100% rename from finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/merchant.jsonl rename to finance-credit-card-chatbot/credit-card-analytics/connectors/testdata/merchant.jsonl diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/merchant_reward.jsonl b/finance-credit-card-chatbot/credit-card-analytics/connectors/testdata/merchant_reward.jsonl similarity index 100% rename from finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/merchant_reward.jsonl rename to finance-credit-card-chatbot/credit-card-analytics/connectors/testdata/merchant_reward.jsonl diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/transaction.jsonl b/finance-credit-card-chatbot/credit-card-analytics/connectors/testdata/transaction.jsonl similarity index 100% rename from finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/transaction.jsonl rename to finance-credit-card-chatbot/credit-card-analytics/connectors/testdata/transaction.jsonl diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-kafka/card_assignment.table.sql b/finance-credit-card-chatbot/credit-card-analytics/creditcard-kafka/card_assignment.table.sql deleted file mode 100755 index db5a6dbc..00000000 --- a/finance-credit-card-chatbot/credit-card-analytics/creditcard-kafka/card_assignment.table.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE CardAssignment ( - customerId BIGINT NOT NULL, - cardNo STRING NOT NULL, - cardType STRING NOT NULL, - `timestamp` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '1' SECOND -) WITH ( - 'connector' = 'kafka', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'mygroupid', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'value.format' = 'flexible-json', - 'topic' = 'cardassignment' - ); diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-kafka/merchant.table.sql b/finance-credit-card-chatbot/credit-card-analytics/creditcard-kafka/merchant.table.sql deleted file mode 100755 index 2de462e9..00000000 --- a/finance-credit-card-chatbot/credit-card-analytics/creditcard-kafka/merchant.table.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE Merchant ( - merchantId BIGINT NOT NULL, - name STRING NOT NULL, - category STRING NOT NULL, - updatedTime TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND -) WITH ( - 'connector' = 'kafka', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'mygroupid', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'value.format' = 'flexible-json', - 'topic' = 'merchant' - ); diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-kafka/merchant_reward.table.sql b/finance-credit-card-chatbot/credit-card-analytics/creditcard-kafka/merchant_reward.table.sql deleted file mode 100755 index e3895832..00000000 --- a/finance-credit-card-chatbot/credit-card-analytics/creditcard-kafka/merchant_reward.table.sql +++ /dev/null @@ -1,19 +0,0 @@ -CREATE TABLE MerchantReward ( - merchantId BIGINT NOT NULL, - rewardsByCard ARRAY> NOT NULL, - updatedTime TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND -) WITH ( - 'connector' = 'kafka', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'mygroupid', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'value.format' = 'flexible-json', - 'topic' = 'merchantreward' - ); diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-kafka/transaction.table.sql b/finance-credit-card-chatbot/credit-card-analytics/creditcard-kafka/transaction.table.sql deleted file mode 100755 index 9a5c4a8b..00000000 --- a/finance-credit-card-chatbot/credit-card-analytics/creditcard-kafka/transaction.table.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE TABLE Transaction ( - transactionId BIGINT NOT NULL, - cardNo STRING NOT NULL, - `time` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - amount DOUBLE NOT NULL, - merchantId BIGINT NOT NULL, - WATERMARK FOR `time` AS `time` - INTERVAL '1' SECOND -) WITH ( - 'connector' = 'kafka', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'mygroupid', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'value.format' = 'flexible-json', - 'topic' = 'transaction' - ); diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/card_assignment.table.sql b/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/card_assignment.table.sql deleted file mode 100644 index 9c767777..00000000 --- a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/card_assignment.table.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE CardAssignment ( - customerId BIGINT NOT NULL, - cardNo STRING NOT NULL, - cardType STRING NOT NULL, - `timestamp` TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`customerId`, `cardNo`, `timestamp`) NOT ENFORCED, - WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '1' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/card_assignment.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/merchant.table.sql b/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/merchant.table.sql deleted file mode 100644 index 2b517e1e..00000000 --- a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/merchant.table.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE Merchant ( - merchantId BIGINT NOT NULL, - name STRING NOT NULL, - category STRING NOT NULL, - updatedTime TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`merchantId`, `updatedTime`) NOT ENFORCED, - WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/merchant.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' - ); \ No newline at end of file diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/merchant_reward.table.sql b/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/merchant_reward.table.sql deleted file mode 100644 index 54943851..00000000 --- a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/merchant_reward.table.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE MerchantReward ( - merchantId BIGINT NOT NULL, - rewardsByCard ARRAY> NOT NULL, - updatedTime TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`merchantId`, `updatedTime`) NOT ENFORCED, - WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/merchant_reward.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/transaction.table.sql b/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/transaction.table.sql deleted file mode 100644 index 59dd317d..00000000 --- a/finance-credit-card-chatbot/credit-card-analytics/creditcard-testdata/transaction.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE Transaction ( - transactionId BIGINT NOT NULL, - cardNo STRING NOT NULL, - `time` TIMESTAMP_LTZ(3) NOT NULL, - amount DOUBLE NOT NULL, - merchantId BIGINT NOT NULL, - PRIMARY KEY (`transactionId`, `time`) NOT ENFORCED, - WATERMARK FOR `time` AS `time` - INTERVAL '1' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/transaction.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' - ); \ No newline at end of file diff --git a/finance-credit-card-chatbot/credit-card-analytics/creditcard_analytics.sqrl b/finance-credit-card-chatbot/credit-card-analytics/creditcard_analytics.sqrl index 03731cf5..e7955061 100644 --- a/finance-credit-card-chatbot/credit-card-analytics/creditcard_analytics.sqrl +++ b/finance-credit-card-chatbot/credit-card-analytics/creditcard_analytics.sqrl @@ -1,16 +1,15 @@ /* Import Data */ -IMPORT creditcard-{{variant}}.merchant AS _MerchantStream; -IMPORT creditcard-{{variant}}.card_assignment AS _CardAssignmentStream; -IMPORT creditcard-{{variant}}.transaction AS _Transaction; +IMPORT connectors.sources-{{variant}} AS sources; /* Deduplicate CDC Streams */ -_Merchant := DISTINCT _MerchantStream ON merchantId ORDER BY updatedTime DESC; -_CardAssignment := DISTINCT _CardAssignmentStream ON cardNo ORDER BY `timestamp` DESC; +_Merchant := DISTINCT sources.Merchant ON merchantId ORDER BY updatedTime DESC; +_CardAssignment := DISTINCT sources.CardAssignment ON cardNo ORDER BY `timestamp` DESC; /** Enrich credit card transactions with customer and merchant information */ +/*+no_query */ CustomerTransaction := SELECT t.transactionId, t.cardNo, t.`time`, t.amount, m.name AS merchantName, m.category, c.customerId - FROM _Transaction t + FROM sources.Transaction t JOIN _CardAssignment FOR SYSTEM_TIME AS OF t.`time` c ON t.cardNo = c.cardNo JOIN _Merchant FOR SYSTEM_TIME AS OF t.`time` m ON t.merchantId = m.merchantId; @@ -29,12 +28,14 @@ _SpendingByDay := SELECT customerId, window_time as timeDay, SUM(amount) as spen /* ==== QUERY ENDPOINTS ==== */ -/** Returns all credit card transactions within a specified time period ordered by time (most recent first) */ +/** Returns all credit card transactions since fromTime (inclusive) and until toTime (exclusive) for the given customer showing most recent transactions first. + fromTime and toTime must be RFC-3339 compliant date time scalar. Both must be the start of a day, e.g. 2024-01-19T00:00:00-00:00. */ Transactions(customerId BIGINT NOT NULL, fromTime TIMESTAMP NOT NULL, toTime TIMESTAMP NOT NULL) := SELECT * FROM CustomerTransaction WHERE customerId = :customerId AND :fromTime <= `time` AND :toTime > `time` ORDER BY `time` DESC LIMIT 10000; -/* Returns the total customer spending by day for the specified time period ordered by time (most recent first) */ +/* Returns the total customer spending by day since fromTime (inclusive) and until toTime (exclusive) ordered by time (most recent first) + fromTime and toTime must be RFC-3339 compliant date time scalar. Both must be the start of a day, e.g. 2024-01-19T00:00:00-00:00. */ SpendingByDay(customerId BIGINT NOT NULL, fromTime TIMESTAMP NOT NULL, toTime TIMESTAMP NOT NULL) := SELECT timeDay, spending FROM _SpendingByDay WHERE customerId = :customerId AND :fromTime <= timeDay AND :toTime > timeDay diff --git a/finance-credit-card-chatbot/credit-card-analytics/snapshots/CustomerTransactionTest.snapshot b/finance-credit-card-chatbot/credit-card-analytics/snapshots/CustomerTransactionTest.snapshot index 9a0fa1d3..696ae12c 100644 --- a/finance-credit-card-chatbot/credit-card-analytics/snapshots/CustomerTransactionTest.snapshot +++ b/finance-credit-card-chatbot/credit-card-analytics/snapshots/CustomerTransactionTest.snapshot @@ -1,6 +1,14 @@ { "data" : { "CustomerTransactionTest" : [ { + "transactionId" : 8571358, + "cardNo" : "6771897352274545", + "time" : "2024-06-05T06:42:05.106Z", + "amount" : 48.73, + "merchantName" : "Hayes Group", + "category" : "Restaurants & Dining", + "customerId" : 2 + }, { "transactionId" : 8571374, "cardNo" : "6771894392571071", "time" : "2024-06-05T06:40:55.077Z", @@ -32,14 +40,6 @@ "merchantName" : "Howe and Sons", "category" : "Housing & Utilities", "customerId" : 6 - }, { - "transactionId" : 8571373, - "cardNo" : "6771894392571071", - "time" : "2024-06-05T05:38:52.502Z", - "amount" : 195.89, - "merchantName" : "Paucek, Pfeffer and Nolan", - "category" : "Clothing & Apparel", - "customerId" : 9 } ] } } \ No newline at end of file diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/README.md b/finance-credit-card-chatbot/credit-card-rewards/connectors/README.md similarity index 100% rename from finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/README.md rename to finance-credit-card-chatbot/credit-card-rewards/connectors/README.md diff --git a/finance-credit-card-chatbot/credit-card-rewards/connectors/sources-kafka.sqrl b/finance-credit-card-chatbot/credit-card-rewards/connectors/sources-kafka.sqrl new file mode 100644 index 00000000..b6b3c979 --- /dev/null +++ b/finance-credit-card-chatbot/credit-card-rewards/connectors/sources-kafka.sqrl @@ -0,0 +1,68 @@ +CREATE TABLE CardAssignment ( + customerId BIGINT NOT NULL, + cardNo STRING NOT NULL, + cardType STRING NOT NULL, + `timestamp` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '1' SECOND +) WITH ( + 'connector' = 'kafka', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'mygroupid', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'value.format' = 'flexible-json', + 'topic' = 'cardassignment' + ); + +CREATE TABLE Merchant ( + merchantId BIGINT NOT NULL, + name STRING NOT NULL, + category STRING NOT NULL, + updatedTime TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND +) WITH ( + 'connector' = 'kafka', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'mygroupid', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'value.format' = 'flexible-json', + 'topic' = 'merchant' + ); + +CREATE TABLE MerchantReward ( + merchantId BIGINT NOT NULL, + rewardsByCard ARRAY> NOT NULL, + updatedTime TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND +) WITH ( + 'connector' = 'kafka', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'mygroupid', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'value.format' = 'flexible-json', + 'topic' = 'merchantreward' + ); + +CREATE TABLE Transaction ( + transactionId BIGINT NOT NULL, + cardNo STRING NOT NULL, + `time` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + amount DOUBLE NOT NULL, + merchantId BIGINT NOT NULL, + WATERMARK FOR `time` AS `time` - INTERVAL '1' SECOND +) WITH ( + 'connector' = 'kafka', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'mygroupid', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'value.format' = 'flexible-json', + 'topic' = 'transaction' + ); diff --git a/finance-credit-card-chatbot/credit-card-rewards/connectors/sources-testdata.sqrl b/finance-credit-card-chatbot/credit-card-rewards/connectors/sources-testdata.sqrl new file mode 100644 index 00000000..9ed4d3c1 --- /dev/null +++ b/finance-credit-card-chatbot/credit-card-rewards/connectors/sources-testdata.sqrl @@ -0,0 +1,62 @@ +CREATE TABLE CardAssignment +( + customerId BIGINT NOT NULL, + cardNo STRING NOT NULL, + cardType STRING NOT NULL, + `timestamp` TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`customerId`, `cardNo`, `timestamp`) NOT ENFORCED, + WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '1' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/card_assignment.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE Merchant +( + merchantId BIGINT NOT NULL, + name STRING NOT NULL, + category STRING NOT NULL, + updatedTime TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`merchantId`, `updatedTime`) NOT ENFORCED, + WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/merchant.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE MerchantReward +( + merchantId BIGINT NOT NULL, + rewardsByCard ARRAY> NOT NULL, + updatedTime TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`merchantId`, `updatedTime`) NOT ENFORCED, + WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/merchant_reward.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE Transaction +( + transactionId BIGINT NOT NULL, + cardNo STRING NOT NULL, + `time` TIMESTAMP_LTZ(3) NOT NULL, + amount DOUBLE NOT NULL, + merchantId BIGINT NOT NULL, + PRIMARY KEY (`transactionId`, `time`) NOT ENFORCED, + WATERMARK FOR `time` AS `time` - INTERVAL '1' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/transaction.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/card_assignment.jsonl b/finance-credit-card-chatbot/credit-card-rewards/connectors/testdata/card_assignment.jsonl similarity index 100% rename from finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/card_assignment.jsonl rename to finance-credit-card-chatbot/credit-card-rewards/connectors/testdata/card_assignment.jsonl diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/merchant.jsonl b/finance-credit-card-chatbot/credit-card-rewards/connectors/testdata/merchant.jsonl similarity index 100% rename from finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/merchant.jsonl rename to finance-credit-card-chatbot/credit-card-rewards/connectors/testdata/merchant.jsonl diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/merchant_reward.jsonl b/finance-credit-card-chatbot/credit-card-rewards/connectors/testdata/merchant_reward.jsonl similarity index 100% rename from finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/merchant_reward.jsonl rename to finance-credit-card-chatbot/credit-card-rewards/connectors/testdata/merchant_reward.jsonl diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/transaction.jsonl b/finance-credit-card-chatbot/credit-card-rewards/connectors/testdata/transaction.jsonl similarity index 100% rename from finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/transaction.jsonl rename to finance-credit-card-chatbot/credit-card-rewards/connectors/testdata/transaction.jsonl diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-kafka/card_assignment.table.sql b/finance-credit-card-chatbot/credit-card-rewards/creditcard-kafka/card_assignment.table.sql deleted file mode 100755 index db5a6dbc..00000000 --- a/finance-credit-card-chatbot/credit-card-rewards/creditcard-kafka/card_assignment.table.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE CardAssignment ( - customerId BIGINT NOT NULL, - cardNo STRING NOT NULL, - cardType STRING NOT NULL, - `timestamp` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '1' SECOND -) WITH ( - 'connector' = 'kafka', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'mygroupid', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'value.format' = 'flexible-json', - 'topic' = 'cardassignment' - ); diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-kafka/merchant.table.sql b/finance-credit-card-chatbot/credit-card-rewards/creditcard-kafka/merchant.table.sql deleted file mode 100755 index 2de462e9..00000000 --- a/finance-credit-card-chatbot/credit-card-rewards/creditcard-kafka/merchant.table.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE Merchant ( - merchantId BIGINT NOT NULL, - name STRING NOT NULL, - category STRING NOT NULL, - updatedTime TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND -) WITH ( - 'connector' = 'kafka', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'mygroupid', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'value.format' = 'flexible-json', - 'topic' = 'merchant' - ); diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-kafka/merchant_reward.table.sql b/finance-credit-card-chatbot/credit-card-rewards/creditcard-kafka/merchant_reward.table.sql deleted file mode 100755 index e3895832..00000000 --- a/finance-credit-card-chatbot/credit-card-rewards/creditcard-kafka/merchant_reward.table.sql +++ /dev/null @@ -1,19 +0,0 @@ -CREATE TABLE MerchantReward ( - merchantId BIGINT NOT NULL, - rewardsByCard ARRAY> NOT NULL, - updatedTime TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND -) WITH ( - 'connector' = 'kafka', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'mygroupid', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'value.format' = 'flexible-json', - 'topic' = 'merchantreward' - ); diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-kafka/transaction.table.sql b/finance-credit-card-chatbot/credit-card-rewards/creditcard-kafka/transaction.table.sql deleted file mode 100755 index 9a5c4a8b..00000000 --- a/finance-credit-card-chatbot/credit-card-rewards/creditcard-kafka/transaction.table.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE TABLE Transaction ( - transactionId BIGINT NOT NULL, - cardNo STRING NOT NULL, - `time` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - amount DOUBLE NOT NULL, - merchantId BIGINT NOT NULL, - WATERMARK FOR `time` AS `time` - INTERVAL '1' SECOND -) WITH ( - 'connector' = 'kafka', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'mygroupid', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'value.format' = 'flexible-json', - 'topic' = 'transaction' - ); diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/card_assignment.table.sql b/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/card_assignment.table.sql deleted file mode 100644 index 9c767777..00000000 --- a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/card_assignment.table.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE CardAssignment ( - customerId BIGINT NOT NULL, - cardNo STRING NOT NULL, - cardType STRING NOT NULL, - `timestamp` TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`customerId`, `cardNo`, `timestamp`) NOT ENFORCED, - WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '1' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/card_assignment.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/merchant.table.sql b/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/merchant.table.sql deleted file mode 100644 index 2b517e1e..00000000 --- a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/merchant.table.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE Merchant ( - merchantId BIGINT NOT NULL, - name STRING NOT NULL, - category STRING NOT NULL, - updatedTime TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`merchantId`, `updatedTime`) NOT ENFORCED, - WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/merchant.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' - ); \ No newline at end of file diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/merchant_reward.table.sql b/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/merchant_reward.table.sql deleted file mode 100644 index 54943851..00000000 --- a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/merchant_reward.table.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE MerchantReward ( - merchantId BIGINT NOT NULL, - rewardsByCard ARRAY> NOT NULL, - updatedTime TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`merchantId`, `updatedTime`) NOT ENFORCED, - WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/merchant_reward.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/transaction.table.sql b/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/transaction.table.sql deleted file mode 100644 index 59dd317d..00000000 --- a/finance-credit-card-chatbot/credit-card-rewards/creditcard-testdata/transaction.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE Transaction ( - transactionId BIGINT NOT NULL, - cardNo STRING NOT NULL, - `time` TIMESTAMP_LTZ(3) NOT NULL, - amount DOUBLE NOT NULL, - merchantId BIGINT NOT NULL, - PRIMARY KEY (`transactionId`, `time`) NOT ENFORCED, - WATERMARK FOR `time` AS `time` - INTERVAL '1' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/transaction.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' - ); \ No newline at end of file diff --git a/finance-credit-card-chatbot/credit-card-rewards/creditcard_rewards.sqrl b/finance-credit-card-chatbot/credit-card-rewards/creditcard_rewards.sqrl index d91b2be1..6599fce6 100644 --- a/finance-credit-card-chatbot/credit-card-rewards/creditcard_rewards.sqrl +++ b/finance-credit-card-chatbot/credit-card-rewards/creditcard_rewards.sqrl @@ -1,17 +1,14 @@ -IMPORT creditcard-{{variant}}.merchant AS _MerchantStream; -IMPORT creditcard-{{variant}}.card_assignment AS _CardAssignmentStream; -IMPORT creditcard-{{variant}}.transaction AS _Transaction; -IMPORT creditcard-{{variant}}.merchant_reward AS _MerchantRewardStream; +IMPORT connectors.sources-{{variant}} AS sources; /* Deduplicate CDC Streams */ -_Merchant := DISTINCT _MerchantStream ON merchantId ORDER BY updatedTime DESC; -_CardAssignment := DISTINCT _CardAssignmentStream ON cardNo ORDER BY `timestamp` DESC; -_MerchantReward := DISTINCT _MerchantRewardStream ON merchantId ORDER BY updatedTime DESC; +_Merchant := DISTINCT sources.Merchant ON merchantId ORDER BY updatedTime DESC; +_CardAssignment := DISTINCT sources.CardAssignment ON cardNo ORDER BY `timestamp` DESC; +_MerchantReward := DISTINCT sources.MerchantReward ON merchantId ORDER BY updatedTime DESC; /* Part 1: Compute customer rewards */ _CustomerTransaction := SELECT t.transactionId, t.cardNo, t.`time`, t.amount, m.name AS merchantName, m.merchantId, m.category, c.customerId, c.cardType - FROM _Transaction t + FROM sources.Transaction t JOIN _CardAssignment FOR SYSTEM_TIME AS OF t.`time` c ON t.cardNo = c.cardNo JOIN _Merchant FOR SYSTEM_TIME AS OF t.`time` m ON t.merchantId = m.merchantId; diff --git a/finance-credit-card-chatbot/credit-card-views/connectors/sources-kafka.sqrl b/finance-credit-card-chatbot/credit-card-views/connectors/sources-kafka.sqrl new file mode 100644 index 00000000..06c2bacd --- /dev/null +++ b/finance-credit-card-chatbot/credit-card-views/connectors/sources-kafka.sqrl @@ -0,0 +1,48 @@ +CREATE TABLE CardAssignment ( + customerId BIGINT NOT NULL, + cardNo STRING NOT NULL, + cardType STRING NOT NULL, + `timestamp` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '1' SECOND +) WITH ( + 'connector' = 'kafka', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'mygroupid', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'value.format' = 'flexible-json', + 'topic' = 'cardassignment' + ); + +CREATE TABLE Merchant ( + merchantId BIGINT NOT NULL, + name STRING NOT NULL, + category STRING NOT NULL, + updatedTime TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND +) WITH ( + 'connector' = 'kafka', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'mygroupid', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'value.format' = 'flexible-json', + 'topic' = 'merchant' + ); + +CREATE TABLE Transaction ( + transactionId BIGINT NOT NULL, + cardNo STRING NOT NULL, + `time` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + amount DOUBLE NOT NULL, + merchantId BIGINT NOT NULL, + WATERMARK FOR `time` AS `time` - INTERVAL '1' SECOND +) WITH ( + 'connector' = 'kafka', + 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', + 'properties.group.id' = 'mygroupid', + 'scan.startup.mode' = 'group-offsets', + 'properties.auto.offset.reset' = 'earliest', + 'value.format' = 'flexible-json', + 'topic' = 'transaction' + ); diff --git a/finance-credit-card-chatbot/credit-card-views/connectors/sources-testdata.sqrl b/finance-credit-card-chatbot/credit-card-views/connectors/sources-testdata.sqrl new file mode 100644 index 00000000..95a6c3ee --- /dev/null +++ b/finance-credit-card-chatbot/credit-card-views/connectors/sources-testdata.sqrl @@ -0,0 +1,45 @@ +CREATE TABLE CardAssignment +( + customerId BIGINT NOT NULL, + cardNo STRING NOT NULL, + cardType STRING NOT NULL, + `timestamp` TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`customerId`, `cardNo`, `timestamp`) NOT ENFORCED, + WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '1' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/card_assignment.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE Merchant +( + merchantId BIGINT NOT NULL, + name STRING NOT NULL, + category STRING NOT NULL, + updatedTime TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`merchantId`, `updatedTime`) NOT ENFORCED, + WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/merchant.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE Transaction +( + transactionId BIGINT NOT NULL, + cardNo STRING NOT NULL, + `time` TIMESTAMP_LTZ(3) NOT NULL, + amount DOUBLE NOT NULL, + merchantId BIGINT NOT NULL, + PRIMARY KEY (`transactionId`, `time`) NOT ENFORCED, + WATERMARK FOR `time` AS `time` - INTERVAL '1' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/transaction.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/README.md b/finance-credit-card-chatbot/credit-card-views/connectors/testdata/README.md similarity index 74% rename from finance-credit-card-chatbot/credit-card-views/creditcard-testdata/README.md rename to finance-credit-card-chatbot/credit-card-views/connectors/testdata/README.md index 0a0e59e9..11edb988 100644 --- a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/README.md +++ b/finance-credit-card-chatbot/credit-card-views/connectors/testdata/README.md @@ -49,30 +49,6 @@ Sample Record: {"merchantId": 57, "name": "Blanda-Weissnat", "category": "Housing & Utilities", "updatedTime": "2024-02-25T00:00:00Z"} ``` -#### Merchant Reward Data - -This dataset provides information on rewards offered by specific merchants for different card types. Each merchant may offer different reward percentages depending on the card type, with each reward having a start and expiration date. - -Fields: -- merchantId: Unique identifier for the merchant. -- rewardsByCard: An array of reward structures associated with specific card types. Each entry in the array includes: -- cardType: The type of card eligible for the reward (e.g., "travel", "sports"). -- rewardPercentage: The percentage of reward offered on purchases with this card type. -- startTimestamp: Start of the reward period in Unix epoch time. -- expirationTimestamp: End of the reward period in Unix epoch time. -- updatedTime: The time when this reward information was last updated, in ISO 8601 format. - -Sample Record: -```json -{ - "merchantId": 61, - "rewardsByCard": [ - {"cardType": "travel", "rewardPercentage": 10, "startTimestamp": 1709164800, "expirationTimestamp": 1710979200} - ], - "updatedTime": "2024-02-25T00:00:00Z" -} -``` - #### Transaction Data This dataset logs each transaction made by customers using their credit cards. Each transaction includes details such as the card number, time of the transaction, the amount, and the associated merchant. diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/card_assignment.jsonl b/finance-credit-card-chatbot/credit-card-views/connectors/testdata/card_assignment.jsonl similarity index 100% rename from finance-credit-card-chatbot/credit-card-views/creditcard-testdata/card_assignment.jsonl rename to finance-credit-card-chatbot/credit-card-views/connectors/testdata/card_assignment.jsonl diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/merchant.jsonl b/finance-credit-card-chatbot/credit-card-views/connectors/testdata/merchant.jsonl similarity index 100% rename from finance-credit-card-chatbot/credit-card-views/creditcard-testdata/merchant.jsonl rename to finance-credit-card-chatbot/credit-card-views/connectors/testdata/merchant.jsonl diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/transaction.jsonl b/finance-credit-card-chatbot/credit-card-views/connectors/testdata/transaction.jsonl similarity index 100% rename from finance-credit-card-chatbot/credit-card-views/creditcard-testdata/transaction.jsonl rename to finance-credit-card-chatbot/credit-card-views/connectors/testdata/transaction.jsonl diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-kafka/card_assignment.table.sql b/finance-credit-card-chatbot/credit-card-views/creditcard-kafka/card_assignment.table.sql deleted file mode 100755 index db5a6dbc..00000000 --- a/finance-credit-card-chatbot/credit-card-views/creditcard-kafka/card_assignment.table.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE CardAssignment ( - customerId BIGINT NOT NULL, - cardNo STRING NOT NULL, - cardType STRING NOT NULL, - `timestamp` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '1' SECOND -) WITH ( - 'connector' = 'kafka', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'mygroupid', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'value.format' = 'flexible-json', - 'topic' = 'cardassignment' - ); diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-kafka/merchant.table.sql b/finance-credit-card-chatbot/credit-card-views/creditcard-kafka/merchant.table.sql deleted file mode 100755 index 2de462e9..00000000 --- a/finance-credit-card-chatbot/credit-card-views/creditcard-kafka/merchant.table.sql +++ /dev/null @@ -1,15 +0,0 @@ -CREATE TABLE Merchant ( - merchantId BIGINT NOT NULL, - name STRING NOT NULL, - category STRING NOT NULL, - updatedTime TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND -) WITH ( - 'connector' = 'kafka', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'mygroupid', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'value.format' = 'flexible-json', - 'topic' = 'merchant' - ); diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-kafka/merchant_reward.table.sql b/finance-credit-card-chatbot/credit-card-views/creditcard-kafka/merchant_reward.table.sql deleted file mode 100755 index e3895832..00000000 --- a/finance-credit-card-chatbot/credit-card-views/creditcard-kafka/merchant_reward.table.sql +++ /dev/null @@ -1,19 +0,0 @@ -CREATE TABLE MerchantReward ( - merchantId BIGINT NOT NULL, - rewardsByCard ARRAY> NOT NULL, - updatedTime TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND -) WITH ( - 'connector' = 'kafka', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'mygroupid', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'value.format' = 'flexible-json', - 'topic' = 'merchantreward' - ); diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-kafka/transaction.table.sql b/finance-credit-card-chatbot/credit-card-views/creditcard-kafka/transaction.table.sql deleted file mode 100755 index 9a5c4a8b..00000000 --- a/finance-credit-card-chatbot/credit-card-views/creditcard-kafka/transaction.table.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE TABLE Transaction ( - transactionId BIGINT NOT NULL, - cardNo STRING NOT NULL, - `time` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - amount DOUBLE NOT NULL, - merchantId BIGINT NOT NULL, - WATERMARK FOR `time` AS `time` - INTERVAL '1' SECOND -) WITH ( - 'connector' = 'kafka', - 'properties.bootstrap.servers' = '${KAFKA_BOOTSTRAP_SERVERS}', - 'properties.group.id' = 'mygroupid', - 'scan.startup.mode' = 'group-offsets', - 'properties.auto.offset.reset' = 'earliest', - 'value.format' = 'flexible-json', - 'topic' = 'transaction' - ); diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/card_assignment.table.sql b/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/card_assignment.table.sql deleted file mode 100644 index 9c767777..00000000 --- a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/card_assignment.table.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE CardAssignment ( - customerId BIGINT NOT NULL, - cardNo STRING NOT NULL, - cardType STRING NOT NULL, - `timestamp` TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`customerId`, `cardNo`, `timestamp`) NOT ENFORCED, - WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '1' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/card_assignment.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/merchant.table.sql b/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/merchant.table.sql deleted file mode 100644 index 2b517e1e..00000000 --- a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/merchant.table.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE TABLE Merchant ( - merchantId BIGINT NOT NULL, - name STRING NOT NULL, - category STRING NOT NULL, - updatedTime TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`merchantId`, `updatedTime`) NOT ENFORCED, - WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/merchant.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' - ); \ No newline at end of file diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/merchant_reward.jsonl b/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/merchant_reward.jsonl deleted file mode 100644 index 58e192f1..00000000 --- a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/merchant_reward.jsonl +++ /dev/null @@ -1,468 +0,0 @@ -{"merchantId":13,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1708992000,"expirationTimestamp":1710720000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":84,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1708992000,"expirationTimestamp":1710892800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1708992000,"expirationTimestamp":1711065600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":30,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1708992000,"expirationTimestamp":1711497600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1708992000,"expirationTimestamp":1710892800},{"cardType":"business","rewardPercentage":10,"startTimestamp":1708992000,"expirationTimestamp":1710720000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":50,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709078400,"expirationTimestamp":1710720000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709078400,"expirationTimestamp":1710374400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":69,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1709078400,"expirationTimestamp":1710547200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709078400,"expirationTimestamp":1710720000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":83,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709078400,"expirationTimestamp":1711238400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709078400,"expirationTimestamp":1710979200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":89,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709164800,"expirationTimestamp":1710892800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709164800,"expirationTimestamp":1710374400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":57,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709164800,"expirationTimestamp":1711238400},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1709164800,"expirationTimestamp":1711065600},{"cardType":"business","rewardPercentage":5,"startTimestamp":1709164800,"expirationTimestamp":1710720000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":84,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709164800,"expirationTimestamp":1711152000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709164800,"expirationTimestamp":1710288000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":38,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1709164800,"expirationTimestamp":1710633600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":61,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709164800,"expirationTimestamp":1710979200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":13,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709251200,"expirationTimestamp":1711238400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709251200,"expirationTimestamp":1711065600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":71,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709251200,"expirationTimestamp":1710806400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709251200,"expirationTimestamp":1710892800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":97,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1709251200,"expirationTimestamp":1711152000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709251200,"expirationTimestamp":1710720000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":48,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709251200,"expirationTimestamp":1710633600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709251200,"expirationTimestamp":1711238400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":69,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709251200,"expirationTimestamp":1711152000},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1709251200,"expirationTimestamp":1710806400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":74,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709251200,"expirationTimestamp":1711065600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1709251200,"expirationTimestamp":1710979200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":40,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709251200,"expirationTimestamp":1710806400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709251200,"expirationTimestamp":1710979200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":20,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1709337600,"expirationTimestamp":1711152000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709337600,"expirationTimestamp":1710979200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":81,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1709337600,"expirationTimestamp":1711152000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709337600,"expirationTimestamp":1711065600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1709337600,"expirationTimestamp":1711411200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":26,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709337600,"expirationTimestamp":1710460800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709337600,"expirationTimestamp":1710979200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":74,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709337600,"expirationTimestamp":1711152000},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1709337600,"expirationTimestamp":1711065600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1709337600,"expirationTimestamp":1710892800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":56,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709337600,"expirationTimestamp":1711238400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1709337600,"expirationTimestamp":1710979200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":17,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709424000,"expirationTimestamp":1711324800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709424000,"expirationTimestamp":1711238400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":97,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709424000,"expirationTimestamp":1711065600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709424000,"expirationTimestamp":1711497600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":36,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709424000,"expirationTimestamp":1711152000},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1709424000,"expirationTimestamp":1711152000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":4,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709424000,"expirationTimestamp":1710892800},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1709424000,"expirationTimestamp":1711411200},{"cardType":"business","rewardPercentage":10,"startTimestamp":1709424000,"expirationTimestamp":1711238400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":53,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709424000,"expirationTimestamp":1711584000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":90,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1709510400,"expirationTimestamp":1711411200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709510400,"expirationTimestamp":1710892800},{"cardType":"business","rewardPercentage":15,"startTimestamp":1709510400,"expirationTimestamp":1711324800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":48,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709510400,"expirationTimestamp":1711497600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709510400,"expirationTimestamp":1710806400},{"cardType":"business","rewardPercentage":15,"startTimestamp":1709510400,"expirationTimestamp":1711238400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":52,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1709510400,"expirationTimestamp":1711411200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709510400,"expirationTimestamp":1711065600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":72,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1709510400,"expirationTimestamp":1711411200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709510400,"expirationTimestamp":1710892800},{"cardType":"business","rewardPercentage":10,"startTimestamp":1709510400,"expirationTimestamp":1711238400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":21,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709510400,"expirationTimestamp":1711324800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709510400,"expirationTimestamp":1711411200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":61,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709510400,"expirationTimestamp":1711065600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709510400,"expirationTimestamp":1711324800},{"cardType":"business","rewardPercentage":20,"startTimestamp":1709510400,"expirationTimestamp":1711324800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":34,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709510400,"expirationTimestamp":1711411200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":77,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709596800,"expirationTimestamp":1711324800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1709596800,"expirationTimestamp":1711238400},{"cardType":"business","rewardPercentage":20,"startTimestamp":1709596800,"expirationTimestamp":1711152000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":17,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709596800,"expirationTimestamp":1711324800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709596800,"expirationTimestamp":1711065600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1709596800,"expirationTimestamp":1711238400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":88,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709596800,"expirationTimestamp":1711497600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709596800,"expirationTimestamp":1710720000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":69,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709596800,"expirationTimestamp":1711411200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":81,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1709683200,"expirationTimestamp":1711670400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709683200,"expirationTimestamp":1711065600},{"cardType":"business","rewardPercentage":15,"startTimestamp":1709683200,"expirationTimestamp":1711411200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":65,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1709769600,"expirationTimestamp":1711411200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709769600,"expirationTimestamp":1711152000},{"cardType":"business","rewardPercentage":5,"startTimestamp":1709769600,"expirationTimestamp":1711324800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":59,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1709769600,"expirationTimestamp":1711584000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":50,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709769600,"expirationTimestamp":1711065600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709769600,"expirationTimestamp":1711411200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":48,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709769600,"expirationTimestamp":1711324800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":88,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709769600,"expirationTimestamp":1711584000},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1709769600,"expirationTimestamp":1711497600},{"cardType":"business","rewardPercentage":5,"startTimestamp":1709769600,"expirationTimestamp":1711411200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":83,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709769600,"expirationTimestamp":1711584000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709769600,"expirationTimestamp":1711756800},{"cardType":"business","rewardPercentage":15,"startTimestamp":1709769600,"expirationTimestamp":1711756800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":49,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1709769600,"expirationTimestamp":1711411200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709769600,"expirationTimestamp":1711584000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":73,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709769600,"expirationTimestamp":1711670400},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1709769600,"expirationTimestamp":1711152000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":100,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709769600,"expirationTimestamp":1711497600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709769600,"expirationTimestamp":1711497600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":9,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709856000,"expirationTimestamp":1711152000},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1709856000,"expirationTimestamp":1711152000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":37,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1709856000,"expirationTimestamp":1712016000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709856000,"expirationTimestamp":1711670400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":15,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709856000,"expirationTimestamp":1712102400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709856000,"expirationTimestamp":1711670400},{"cardType":"business","rewardPercentage":5,"startTimestamp":1709856000,"expirationTimestamp":1711324800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":83,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709856000,"expirationTimestamp":1711411200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709856000,"expirationTimestamp":1711584000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":40,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709856000,"expirationTimestamp":1711670400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":56,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709856000,"expirationTimestamp":1711584000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":91,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1709942400,"expirationTimestamp":1711497600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709942400,"expirationTimestamp":1711929600},{"cardType":"business","rewardPercentage":15,"startTimestamp":1709942400,"expirationTimestamp":1711756800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":13,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1709942400,"expirationTimestamp":1711497600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":64,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709942400,"expirationTimestamp":1711411200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709942400,"expirationTimestamp":1711584000},{"cardType":"business","rewardPercentage":10,"startTimestamp":1709942400,"expirationTimestamp":1711756800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":45,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709942400,"expirationTimestamp":1711756800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1709942400,"expirationTimestamp":1711584000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":95,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709942400,"expirationTimestamp":1711670400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1709942400,"expirationTimestamp":1711324800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":84,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1709942400,"expirationTimestamp":1711324800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":85,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1710028800,"expirationTimestamp":1711670400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1710028800,"expirationTimestamp":1711929600},{"cardType":"business","rewardPercentage":20,"startTimestamp":1710028800,"expirationTimestamp":1711756800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":94,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710028800,"expirationTimestamp":1712188800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1710028800,"expirationTimestamp":1711670400},{"cardType":"business","rewardPercentage":20,"startTimestamp":1710028800,"expirationTimestamp":1711670400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":19,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710028800,"expirationTimestamp":1711843200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1710028800,"expirationTimestamp":1711584000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":9,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710115200,"expirationTimestamp":1712188800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":99,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710115200,"expirationTimestamp":1711929600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710115200,"expirationTimestamp":1711929600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":29,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710115200,"expirationTimestamp":1711756800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1710115200,"expirationTimestamp":1711843200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":69,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710115200,"expirationTimestamp":1712016000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":98,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710115200,"expirationTimestamp":1711670400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":42,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710201600,"expirationTimestamp":1711670400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710201600,"expirationTimestamp":1711756800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":15,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710201600,"expirationTimestamp":1711843200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1710201600,"expirationTimestamp":1712016000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":36,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710201600,"expirationTimestamp":1712016000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1710201600,"expirationTimestamp":1711756800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":29,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710201600,"expirationTimestamp":1712188800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1710201600,"expirationTimestamp":1712361600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":82,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710201600,"expirationTimestamp":1711670400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":46,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710201600,"expirationTimestamp":1712102400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1710201600,"expirationTimestamp":1712188800},{"cardType":"business","rewardPercentage":20,"startTimestamp":1710201600,"expirationTimestamp":1711584000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":73,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710201600,"expirationTimestamp":1712188800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":3,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710288000,"expirationTimestamp":1711843200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1710288000,"expirationTimestamp":1712016000},{"cardType":"business","rewardPercentage":10,"startTimestamp":1710288000,"expirationTimestamp":1711843200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":60,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710288000,"expirationTimestamp":1712102400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1710288000,"expirationTimestamp":1712102400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":95,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710288000,"expirationTimestamp":1712188800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710288000,"expirationTimestamp":1711756800},{"cardType":"business","rewardPercentage":20,"startTimestamp":1710288000,"expirationTimestamp":1712275200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":16,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710288000,"expirationTimestamp":1711843200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710288000,"expirationTimestamp":1712016000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":56,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710288000,"expirationTimestamp":1712448000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":15,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1710374400,"expirationTimestamp":1712275200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710374400,"expirationTimestamp":1712620800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":99,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710460800,"expirationTimestamp":1712188800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1710460800,"expirationTimestamp":1712534400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":97,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710460800,"expirationTimestamp":1712016000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1710460800,"expirationTimestamp":1712016000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":82,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710460800,"expirationTimestamp":1711843200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1710460800,"expirationTimestamp":1711756800},{"cardType":"business","rewardPercentage":15,"startTimestamp":1710460800,"expirationTimestamp":1711929600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":19,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1710460800,"expirationTimestamp":1712448000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1710460800,"expirationTimestamp":1712448000},{"cardType":"business","rewardPercentage":10,"startTimestamp":1710460800,"expirationTimestamp":1712188800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":31,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1710460800,"expirationTimestamp":1712361600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":24,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710547200,"expirationTimestamp":1712707200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710547200,"expirationTimestamp":1712448000},{"cardType":"business","rewardPercentage":15,"startTimestamp":1710547200,"expirationTimestamp":1712361600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":95,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710547200,"expirationTimestamp":1712275200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1710547200,"expirationTimestamp":1712448000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":43,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1710547200,"expirationTimestamp":1712188800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710547200,"expirationTimestamp":1712188800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":91,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1710633600,"expirationTimestamp":1712448000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":60,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710633600,"expirationTimestamp":1712793600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1710633600,"expirationTimestamp":1712188800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":93,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1710633600,"expirationTimestamp":1712448000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":7,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710633600,"expirationTimestamp":1712448000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":49,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1710633600,"expirationTimestamp":1712102400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710633600,"expirationTimestamp":1712448000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":28,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710720000,"expirationTimestamp":1711929600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1710720000,"expirationTimestamp":1712448000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":33,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710720000,"expirationTimestamp":1712534400},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1710720000,"expirationTimestamp":1712793600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":97,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710720000,"expirationTimestamp":1712448000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":84,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710720000,"expirationTimestamp":1712966400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710720000,"expirationTimestamp":1712966400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":82,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710720000,"expirationTimestamp":1712275200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1710720000,"expirationTimestamp":1712707200},{"cardType":"business","rewardPercentage":15,"startTimestamp":1710720000,"expirationTimestamp":1712534400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":28,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710806400,"expirationTimestamp":1712966400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710806400,"expirationTimestamp":1712102400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":2,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710806400,"expirationTimestamp":1712793600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710806400,"expirationTimestamp":1712188800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":91,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1710892800,"expirationTimestamp":1712188800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":54,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710892800,"expirationTimestamp":1712707200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1710892800,"expirationTimestamp":1712793600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":33,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710892800,"expirationTimestamp":1712707200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710892800,"expirationTimestamp":1712966400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":65,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710892800,"expirationTimestamp":1712448000},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1710892800,"expirationTimestamp":1712448000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":95,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710892800,"expirationTimestamp":1712793600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1710892800,"expirationTimestamp":1712793600},{"cardType":"business","rewardPercentage":5,"startTimestamp":1710892800,"expirationTimestamp":1712707200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":43,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710892800,"expirationTimestamp":1712880000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710892800,"expirationTimestamp":1712620800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":14,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710892800,"expirationTimestamp":1712966400},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1710892800,"expirationTimestamp":1712534400},{"cardType":"business","rewardPercentage":15,"startTimestamp":1710892800,"expirationTimestamp":1712707200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":82,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1710892800,"expirationTimestamp":1712707200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1710892800,"expirationTimestamp":1712534400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":86,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710892800,"expirationTimestamp":1712448000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1710892800,"expirationTimestamp":1712275200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":39,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1710979200,"expirationTimestamp":1712793600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1710979200,"expirationTimestamp":1712620800},{"cardType":"business","rewardPercentage":10,"startTimestamp":1710979200,"expirationTimestamp":1712707200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":69,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1710979200,"expirationTimestamp":1712620800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1710979200,"expirationTimestamp":1712448000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":85,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711065600,"expirationTimestamp":1712448000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1711065600,"expirationTimestamp":1712793600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":24,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711065600,"expirationTimestamp":1713139200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711065600,"expirationTimestamp":1712966400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":92,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711065600,"expirationTimestamp":1712793600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1711065600,"expirationTimestamp":1713139200},{"cardType":"business","rewardPercentage":5,"startTimestamp":1711065600,"expirationTimestamp":1712880000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":51,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711065600,"expirationTimestamp":1713052800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711065600,"expirationTimestamp":1712707200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":31,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1711065600,"expirationTimestamp":1712880000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":73,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711065600,"expirationTimestamp":1712966400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711065600,"expirationTimestamp":1713139200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":47,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1711065600,"expirationTimestamp":1712966400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711065600,"expirationTimestamp":1712793600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":67,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711152000,"expirationTimestamp":1713312000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1711152000,"expirationTimestamp":1713052800},{"cardType":"business","rewardPercentage":5,"startTimestamp":1711152000,"expirationTimestamp":1712880000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":8,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1711152000,"expirationTimestamp":1712448000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1711152000,"expirationTimestamp":1712793600},{"cardType":"business","rewardPercentage":5,"startTimestamp":1711152000,"expirationTimestamp":1713052800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":45,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1711152000,"expirationTimestamp":1713484800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":25,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711152000,"expirationTimestamp":1712620800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711152000,"expirationTimestamp":1712880000},{"cardType":"business","rewardPercentage":5,"startTimestamp":1711152000,"expirationTimestamp":1713312000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":38,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1711152000,"expirationTimestamp":1712793600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711152000,"expirationTimestamp":1712016000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":53,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1711152000,"expirationTimestamp":1712880000},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711152000,"expirationTimestamp":1712793600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":83,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1711152000,"expirationTimestamp":1712966400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":46,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1711152000,"expirationTimestamp":1712361600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":24,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711238400,"expirationTimestamp":1712534400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711238400,"expirationTimestamp":1712880000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":33,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711238400,"expirationTimestamp":1713312000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":6,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711238400,"expirationTimestamp":1713225600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1711238400,"expirationTimestamp":1712880000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":4,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711238400,"expirationTimestamp":1712880000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711238400,"expirationTimestamp":1713052800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":11,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1711238400,"expirationTimestamp":1712793600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711238400,"expirationTimestamp":1712707200},{"cardType":"business","rewardPercentage":15,"startTimestamp":1711238400,"expirationTimestamp":1713052800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":49,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711238400,"expirationTimestamp":1712793600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":40,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1711238400,"expirationTimestamp":1713225600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1711238400,"expirationTimestamp":1713225600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1711238400,"expirationTimestamp":1712534400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":92,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1711324800,"expirationTimestamp":1713398400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1711324800,"expirationTimestamp":1713484800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":5,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711324800,"expirationTimestamp":1713312000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1711324800,"expirationTimestamp":1713052800},{"cardType":"business","rewardPercentage":5,"startTimestamp":1711324800,"expirationTimestamp":1712707200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":73,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1711324800,"expirationTimestamp":1712707200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":9,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711411200,"expirationTimestamp":1713398400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":18,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711411200,"expirationTimestamp":1712966400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":52,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1711411200,"expirationTimestamp":1713571200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":1,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1711411200,"expirationTimestamp":1713484800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711411200,"expirationTimestamp":1712880000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":47,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1711411200,"expirationTimestamp":1713571200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711411200,"expirationTimestamp":1712707200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":28,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711497600,"expirationTimestamp":1713571200},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1711497600,"expirationTimestamp":1712793600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":90,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1711497600,"expirationTimestamp":1713225600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711497600,"expirationTimestamp":1713916800},{"cardType":"business","rewardPercentage":5,"startTimestamp":1711497600,"expirationTimestamp":1713225600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":67,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1711497600,"expirationTimestamp":1713225600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711497600,"expirationTimestamp":1712966400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":15,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711497600,"expirationTimestamp":1713225600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711497600,"expirationTimestamp":1713571200},{"cardType":"business","rewardPercentage":5,"startTimestamp":1711497600,"expirationTimestamp":1713225600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":43,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1711497600,"expirationTimestamp":1713052800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711497600,"expirationTimestamp":1713571200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":51,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711497600,"expirationTimestamp":1713139200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":1,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1711497600,"expirationTimestamp":1713052800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711497600,"expirationTimestamp":1713225600},{"cardType":"business","rewardPercentage":20,"startTimestamp":1711497600,"expirationTimestamp":1713139200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":91,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1711584000,"expirationTimestamp":1713398400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711584000,"expirationTimestamp":1712966400},{"cardType":"business","rewardPercentage":10,"startTimestamp":1711584000,"expirationTimestamp":1713398400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":74,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1711584000,"expirationTimestamp":1713398400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711584000,"expirationTimestamp":1713225600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":1,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1711584000,"expirationTimestamp":1713484800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711584000,"expirationTimestamp":1713484800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":23,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1711670400,"expirationTimestamp":1713484800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711670400,"expirationTimestamp":1713657600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1711670400,"expirationTimestamp":1714003200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":3,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711670400,"expirationTimestamp":1713139200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711670400,"expirationTimestamp":1713312000},{"cardType":"business","rewardPercentage":5,"startTimestamp":1711670400,"expirationTimestamp":1713225600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":80,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711670400,"expirationTimestamp":1713398400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1711670400,"expirationTimestamp":1713052800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":24,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711670400,"expirationTimestamp":1713571200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711670400,"expirationTimestamp":1713484800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":92,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711670400,"expirationTimestamp":1713571200},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1711670400,"expirationTimestamp":1713571200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":68,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711670400,"expirationTimestamp":1713571200},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1711670400,"expirationTimestamp":1713398400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":78,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711670400,"expirationTimestamp":1713225600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":62,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711756800,"expirationTimestamp":1713225600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":60,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711756800,"expirationTimestamp":1713744000},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1711756800,"expirationTimestamp":1713571200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":84,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711756800,"expirationTimestamp":1713830400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":27,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711843200,"expirationTimestamp":1713484800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711843200,"expirationTimestamp":1713484800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":77,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1711843200,"expirationTimestamp":1713657600},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1711843200,"expirationTimestamp":1713744000},{"cardType":"business","rewardPercentage":5,"startTimestamp":1711843200,"expirationTimestamp":1712966400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":48,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711843200,"expirationTimestamp":1714089600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":5,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711843200,"expirationTimestamp":1713657600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1711843200,"expirationTimestamp":1714089600},{"cardType":"business","rewardPercentage":5,"startTimestamp":1711843200,"expirationTimestamp":1713744000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":42,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1711929600,"expirationTimestamp":1713484800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711929600,"expirationTimestamp":1713312000},{"cardType":"business","rewardPercentage":15,"startTimestamp":1711929600,"expirationTimestamp":1713312000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":89,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1711929600,"expirationTimestamp":1713744000},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711929600,"expirationTimestamp":1713657600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1711929600,"expirationTimestamp":1713398400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":28,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1711929600,"expirationTimestamp":1713312000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":80,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711929600,"expirationTimestamp":1713830400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":68,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1711929600,"expirationTimestamp":1713657600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1711929600,"expirationTimestamp":1713484800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":14,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1711929600,"expirationTimestamp":1713571200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":46,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1711929600,"expirationTimestamp":1713657600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":49,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1711929600,"expirationTimestamp":1714089600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1711929600,"expirationTimestamp":1713830400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":92,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712016000,"expirationTimestamp":1714089600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1712016000,"expirationTimestamp":1713484800},{"cardType":"business","rewardPercentage":10,"startTimestamp":1712016000,"expirationTimestamp":1713657600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":36,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712016000,"expirationTimestamp":1713916800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712016000,"expirationTimestamp":1713830400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":30,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712016000,"expirationTimestamp":1713830400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1712016000,"expirationTimestamp":1713398400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":16,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712016000,"expirationTimestamp":1713744000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1712016000,"expirationTimestamp":1713398400},{"cardType":"business","rewardPercentage":5,"startTimestamp":1712016000,"expirationTimestamp":1713657600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":91,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712102400,"expirationTimestamp":1713571200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712102400,"expirationTimestamp":1713657600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1712102400,"expirationTimestamp":1713916800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":66,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712102400,"expirationTimestamp":1713744000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":13,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712102400,"expirationTimestamp":1713398400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712102400,"expirationTimestamp":1713657600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":99,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712102400,"expirationTimestamp":1713830400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":67,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712102400,"expirationTimestamp":1713830400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1712102400,"expirationTimestamp":1713657600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":25,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712102400,"expirationTimestamp":1714176000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1712102400,"expirationTimestamp":1714003200},{"cardType":"business","rewardPercentage":10,"startTimestamp":1712102400,"expirationTimestamp":1714348800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":14,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1712102400,"expirationTimestamp":1713916800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":82,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712102400,"expirationTimestamp":1714003200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":31,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712102400,"expirationTimestamp":1714003200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":3,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712188800,"expirationTimestamp":1714348800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1712188800,"expirationTimestamp":1713916800},{"cardType":"business","rewardPercentage":10,"startTimestamp":1712188800,"expirationTimestamp":1713916800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":77,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712188800,"expirationTimestamp":1714348800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1712188800,"expirationTimestamp":1713744000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":59,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712188800,"expirationTimestamp":1714262400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":7,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712188800,"expirationTimestamp":1713916800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1712188800,"expirationTimestamp":1714089600},{"cardType":"business","rewardPercentage":5,"startTimestamp":1712188800,"expirationTimestamp":1714089600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":11,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712188800,"expirationTimestamp":1714003200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":46,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712188800,"expirationTimestamp":1714176000},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1712188800,"expirationTimestamp":1714348800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":45,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712275200,"expirationTimestamp":1714176000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":50,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712275200,"expirationTimestamp":1714262400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712275200,"expirationTimestamp":1714176000},{"cardType":"business","rewardPercentage":15,"startTimestamp":1712275200,"expirationTimestamp":1714176000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":98,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712275200,"expirationTimestamp":1713830400},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1712275200,"expirationTimestamp":1713571200},{"cardType":"business","rewardPercentage":5,"startTimestamp":1712275200,"expirationTimestamp":1713830400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":63,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712361600,"expirationTimestamp":1713916800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":95,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1712361600,"expirationTimestamp":1713830400},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1712361600,"expirationTimestamp":1713916800},{"cardType":"business","rewardPercentage":20,"startTimestamp":1712361600,"expirationTimestamp":1714262400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":68,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712361600,"expirationTimestamp":1714348800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712361600,"expirationTimestamp":1714003200},{"cardType":"business","rewardPercentage":10,"startTimestamp":1712361600,"expirationTimestamp":1714089600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":94,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712361600,"expirationTimestamp":1714348800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":83,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712361600,"expirationTimestamp":1714348800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":40,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1712361600,"expirationTimestamp":1714003200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712361600,"expirationTimestamp":1714348800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":9,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712448000,"expirationTimestamp":1714348800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":57,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712448000,"expirationTimestamp":1714176000},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1712448000,"expirationTimestamp":1714176000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":27,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712448000,"expirationTimestamp":1713916800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":22,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712448000,"expirationTimestamp":1714176000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":51,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712448000,"expirationTimestamp":1714608000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":75,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712448000,"expirationTimestamp":1714089600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":96,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712534400,"expirationTimestamp":1714521600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":68,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712534400,"expirationTimestamp":1714608000},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1712534400,"expirationTimestamp":1714608000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":52,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712534400,"expirationTimestamp":1714348800},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1712534400,"expirationTimestamp":1714435200},{"cardType":"business","rewardPercentage":15,"startTimestamp":1712534400,"expirationTimestamp":1714089600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":12,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712534400,"expirationTimestamp":1714176000},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1712534400,"expirationTimestamp":1714521600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":76,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712534400,"expirationTimestamp":1713830400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712534400,"expirationTimestamp":1713830400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":33,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712620800,"expirationTimestamp":1714348800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712620800,"expirationTimestamp":1714262400},{"cardType":"business","rewardPercentage":20,"startTimestamp":1712620800,"expirationTimestamp":1714694400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":95,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712620800,"expirationTimestamp":1714262400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712620800,"expirationTimestamp":1714176000},{"cardType":"business","rewardPercentage":10,"startTimestamp":1712620800,"expirationTimestamp":1714262400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":48,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712620800,"expirationTimestamp":1714435200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1712620800,"expirationTimestamp":1714521600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":53,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712620800,"expirationTimestamp":1714435200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":83,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712620800,"expirationTimestamp":1714003200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712620800,"expirationTimestamp":1714262400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":98,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712620800,"expirationTimestamp":1714003200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1712620800,"expirationTimestamp":1714176000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":62,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712707200,"expirationTimestamp":1714089600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":77,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712707200,"expirationTimestamp":1714348800},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1712707200,"expirationTimestamp":1714262400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":51,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712707200,"expirationTimestamp":1714780800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712707200,"expirationTimestamp":1714694400},{"cardType":"business","rewardPercentage":15,"startTimestamp":1712707200,"expirationTimestamp":1714435200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":38,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712707200,"expirationTimestamp":1714608000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":72,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712707200,"expirationTimestamp":1714521600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712707200,"expirationTimestamp":1714089600},{"cardType":"business","rewardPercentage":15,"startTimestamp":1712707200,"expirationTimestamp":1714348800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":46,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712707200,"expirationTimestamp":1714780800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712707200,"expirationTimestamp":1714435200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":66,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1712793600,"expirationTimestamp":1714780800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712793600,"expirationTimestamp":1714348800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":64,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712793600,"expirationTimestamp":1714262400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712793600,"expirationTimestamp":1714521600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":81,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712793600,"expirationTimestamp":1714348800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1712793600,"expirationTimestamp":1714348800},{"cardType":"business","rewardPercentage":5,"startTimestamp":1712793600,"expirationTimestamp":1714521600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":3,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712880000,"expirationTimestamp":1714521600},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1712880000,"expirationTimestamp":1714780800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":89,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712880000,"expirationTimestamp":1714348800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":45,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712880000,"expirationTimestamp":1714608000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":72,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1712880000,"expirationTimestamp":1714694400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712880000,"expirationTimestamp":1714608000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":98,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712880000,"expirationTimestamp":1714608000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1712880000,"expirationTimestamp":1714176000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":77,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712966400,"expirationTimestamp":1714262400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712966400,"expirationTimestamp":1714694400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":79,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712966400,"expirationTimestamp":1714608000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1712966400,"expirationTimestamp":1714694400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":64,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1712966400,"expirationTimestamp":1714521600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":6,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1712966400,"expirationTimestamp":1714780800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":76,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1712966400,"expirationTimestamp":1714089600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1712966400,"expirationTimestamp":1714608000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":40,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1712966400,"expirationTimestamp":1714953600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":18,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713052800,"expirationTimestamp":1714435200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1713052800,"expirationTimestamp":1714953600},{"cardType":"business","rewardPercentage":15,"startTimestamp":1713052800,"expirationTimestamp":1714608000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":45,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1713052800,"expirationTimestamp":1714780800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1713052800,"expirationTimestamp":1714608000},{"cardType":"business","rewardPercentage":10,"startTimestamp":1713052800,"expirationTimestamp":1714435200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":59,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713052800,"expirationTimestamp":1714176000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1713052800,"expirationTimestamp":1714694400},{"cardType":"business","rewardPercentage":5,"startTimestamp":1713052800,"expirationTimestamp":1714608000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":96,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713052800,"expirationTimestamp":1714435200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1713052800,"expirationTimestamp":1714003200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":32,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1713052800,"expirationTimestamp":1714608000},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1713052800,"expirationTimestamp":1714348800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":11,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713052800,"expirationTimestamp":1714694400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":91,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713139200,"expirationTimestamp":1714953600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":41,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713139200,"expirationTimestamp":1715299200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":66,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713139200,"expirationTimestamp":1715126400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":65,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1713139200,"expirationTimestamp":1715299200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":85,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713225600,"expirationTimestamp":1714694400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":8,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713225600,"expirationTimestamp":1715212800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1713225600,"expirationTimestamp":1714780800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":50,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1713225600,"expirationTimestamp":1714867200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":56,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713225600,"expirationTimestamp":1714953600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1713225600,"expirationTimestamp":1714867200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":9,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713312000,"expirationTimestamp":1715472000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1713312000,"expirationTimestamp":1714780800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":48,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1713312000,"expirationTimestamp":1715299200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":51,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713312000,"expirationTimestamp":1715385600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1713312000,"expirationTimestamp":1715126400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":24,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1713398400,"expirationTimestamp":1715385600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1713398400,"expirationTimestamp":1715299200},{"cardType":"business","rewardPercentage":5,"startTimestamp":1713398400,"expirationTimestamp":1715040000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":22,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713398400,"expirationTimestamp":1715126400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1713398400,"expirationTimestamp":1714780800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":51,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713398400,"expirationTimestamp":1715212800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1713398400,"expirationTimestamp":1714608000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":30,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713398400,"expirationTimestamp":1715212800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1713398400,"expirationTimestamp":1715212800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":9,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713484800,"expirationTimestamp":1715385600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":30,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1713484800,"expirationTimestamp":1715212800},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1713484800,"expirationTimestamp":1714953600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":12,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713484800,"expirationTimestamp":1715126400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1713484800,"expirationTimestamp":1715040000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":82,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713484800,"expirationTimestamp":1715299200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1713484800,"expirationTimestamp":1715472000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":42,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713571200,"expirationTimestamp":1715040000},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1713571200,"expirationTimestamp":1715558400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":10,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1713571200,"expirationTimestamp":1715472000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":13,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1713657600,"expirationTimestamp":1715126400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1713657600,"expirationTimestamp":1715472000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":59,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713657600,"expirationTimestamp":1715040000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1713657600,"expirationTimestamp":1715299200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":15,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713657600,"expirationTimestamp":1715299200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1713657600,"expirationTimestamp":1715472000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":30,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713657600,"expirationTimestamp":1714780800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":41,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1713744000,"expirationTimestamp":1715472000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":93,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713744000,"expirationTimestamp":1715817600},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1713744000,"expirationTimestamp":1715472000},{"cardType":"business","rewardPercentage":5,"startTimestamp":1713744000,"expirationTimestamp":1715472000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":48,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713744000,"expirationTimestamp":1715817600},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1713744000,"expirationTimestamp":1715731200},{"cardType":"business","rewardPercentage":10,"startTimestamp":1713744000,"expirationTimestamp":1715126400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":35,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713744000,"expirationTimestamp":1715472000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":94,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1713744000,"expirationTimestamp":1715385600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1713744000,"expirationTimestamp":1715299200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":86,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713744000,"expirationTimestamp":1715817600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":14,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713830400,"expirationTimestamp":1715558400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1713830400,"expirationTimestamp":1715299200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":94,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1713830400,"expirationTimestamp":1715299200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1713830400,"expirationTimestamp":1715040000},{"cardType":"business","rewardPercentage":15,"startTimestamp":1713830400,"expirationTimestamp":1715904000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":49,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1713830400,"expirationTimestamp":1715731200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1713830400,"expirationTimestamp":1715817600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":13,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1713916800,"expirationTimestamp":1715990400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1713916800,"expirationTimestamp":1715472000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":93,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1713916800,"expirationTimestamp":1715126400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":30,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1713916800,"expirationTimestamp":1715731200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1713916800,"expirationTimestamp":1715644800},{"cardType":"business","rewardPercentage":15,"startTimestamp":1713916800,"expirationTimestamp":1715472000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":21,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1713916800,"expirationTimestamp":1715731200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1713916800,"expirationTimestamp":1715644800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":34,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1713916800,"expirationTimestamp":1715385600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":20,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714089600,"expirationTimestamp":1716076800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":60,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1714089600,"expirationTimestamp":1715212800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":48,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1714089600,"expirationTimestamp":1715644800},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1714089600,"expirationTimestamp":1715817600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":4,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714089600,"expirationTimestamp":1715731200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1714089600,"expirationTimestamp":1715558400},{"cardType":"business","rewardPercentage":10,"startTimestamp":1714089600,"expirationTimestamp":1715990400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":28,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1714176000,"expirationTimestamp":1715472000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":77,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1714176000,"expirationTimestamp":1715212800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1714176000,"expirationTimestamp":1715990400},{"cardType":"business","rewardPercentage":15,"startTimestamp":1714176000,"expirationTimestamp":1715472000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":60,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714176000,"expirationTimestamp":1715904000},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1714176000,"expirationTimestamp":1716422400},{"cardType":"business","rewardPercentage":10,"startTimestamp":1714176000,"expirationTimestamp":1716076800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":37,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1714176000,"expirationTimestamp":1716249600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1714176000,"expirationTimestamp":1716163200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":76,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714176000,"expirationTimestamp":1716336000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":31,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1714176000,"expirationTimestamp":1715817600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1714176000,"expirationTimestamp":1715817600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":86,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1714176000,"expirationTimestamp":1715299200},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1714176000,"expirationTimestamp":1715731200},{"cardType":"business","rewardPercentage":5,"startTimestamp":1714176000,"expirationTimestamp":1715212800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":78,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1714176000,"expirationTimestamp":1716076800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":40,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714176000,"expirationTimestamp":1715904000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":58,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1714262400,"expirationTimestamp":1715990400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":32,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1714262400,"expirationTimestamp":1716163200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1714262400,"expirationTimestamp":1715558400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":5,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714262400,"expirationTimestamp":1716163200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1714262400,"expirationTimestamp":1715904000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":71,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1714348800,"expirationTimestamp":1715817600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1714348800,"expirationTimestamp":1716249600},{"cardType":"business","rewardPercentage":5,"startTimestamp":1714348800,"expirationTimestamp":1715904000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":48,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714348800,"expirationTimestamp":1715904000},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1714348800,"expirationTimestamp":1716163200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":26,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1714348800,"expirationTimestamp":1715558400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1714348800,"expirationTimestamp":1716076800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":38,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714348800,"expirationTimestamp":1716249600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1714348800,"expirationTimestamp":1716076800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":82,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1714348800,"expirationTimestamp":1716076800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":59,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1714435200,"expirationTimestamp":1716163200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":46,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714435200,"expirationTimestamp":1716249600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":35,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714521600,"expirationTimestamp":1716508800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1714521600,"expirationTimestamp":1716163200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":14,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1714521600,"expirationTimestamp":1716681600},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1714521600,"expirationTimestamp":1715990400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":70,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1714521600,"expirationTimestamp":1716076800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1714521600,"expirationTimestamp":1716336000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":16,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714521600,"expirationTimestamp":1716249600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":46,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1714521600,"expirationTimestamp":1715990400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1714521600,"expirationTimestamp":1716163200},{"cardType":"business","rewardPercentage":10,"startTimestamp":1714521600,"expirationTimestamp":1716336000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":33,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714608000,"expirationTimestamp":1716249600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1714608000,"expirationTimestamp":1716508800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":99,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714608000,"expirationTimestamp":1716336000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1714608000,"expirationTimestamp":1716249600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":17,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1714608000,"expirationTimestamp":1716336000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1714608000,"expirationTimestamp":1716681600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":6,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1714608000,"expirationTimestamp":1716163200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":58,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1714608000,"expirationTimestamp":1716163200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1714608000,"expirationTimestamp":1716940800},{"cardType":"business","rewardPercentage":5,"startTimestamp":1714608000,"expirationTimestamp":1715817600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":11,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1714608000,"expirationTimestamp":1715990400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":46,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714608000,"expirationTimestamp":1717027200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1714608000,"expirationTimestamp":1715817600},{"cardType":"business","rewardPercentage":20,"startTimestamp":1714608000,"expirationTimestamp":1716336000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":55,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714694400,"expirationTimestamp":1716768000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1714694400,"expirationTimestamp":1716681600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":17,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1714694400,"expirationTimestamp":1716595200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":51,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1714694400,"expirationTimestamp":1716854400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":76,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1714694400,"expirationTimestamp":1716336000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1714694400,"expirationTimestamp":1716595200},{"cardType":"business","rewardPercentage":15,"startTimestamp":1714694400,"expirationTimestamp":1716249600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":28,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714780800,"expirationTimestamp":1716595200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":93,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714780800,"expirationTimestamp":1716768000},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1714780800,"expirationTimestamp":1717027200},{"cardType":"business","rewardPercentage":15,"startTimestamp":1714780800,"expirationTimestamp":1716336000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":22,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1714780800,"expirationTimestamp":1716336000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1714780800,"expirationTimestamp":1716508800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":13,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1714867200,"expirationTimestamp":1716508800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":14,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1714867200,"expirationTimestamp":1716249600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":55,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1714953600,"expirationTimestamp":1716163200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":96,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1714953600,"expirationTimestamp":1716595200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1714953600,"expirationTimestamp":1716854400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":14,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1714953600,"expirationTimestamp":1716940800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":49,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1714953600,"expirationTimestamp":1716854400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1714953600,"expirationTimestamp":1716940800},{"cardType":"business","rewardPercentage":5,"startTimestamp":1714953600,"expirationTimestamp":1716768000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":56,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1714953600,"expirationTimestamp":1716422400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":9,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715040000,"expirationTimestamp":1716768000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1715040000,"expirationTimestamp":1716854400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":23,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715040000,"expirationTimestamp":1716940800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":91,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715040000,"expirationTimestamp":1716163200},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1715040000,"expirationTimestamp":1716854400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":27,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715040000,"expirationTimestamp":1716940800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":95,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715040000,"expirationTimestamp":1716940800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715040000,"expirationTimestamp":1716854400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":10,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715040000,"expirationTimestamp":1716681600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":11,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1715040000,"expirationTimestamp":1716940800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715040000,"expirationTimestamp":1716422400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":16,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715040000,"expirationTimestamp":1717027200},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1715040000,"expirationTimestamp":1716595200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":49,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1715040000,"expirationTimestamp":1717200000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":41,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715126400,"expirationTimestamp":1717113600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715126400,"expirationTimestamp":1717200000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":54,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715126400,"expirationTimestamp":1717113600},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1715126400,"expirationTimestamp":1716681600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":99,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715126400,"expirationTimestamp":1717200000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1715126400,"expirationTimestamp":1716854400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":65,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715126400,"expirationTimestamp":1716681600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715126400,"expirationTimestamp":1716940800},{"cardType":"business","rewardPercentage":20,"startTimestamp":1715126400,"expirationTimestamp":1716681600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":52,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715126400,"expirationTimestamp":1717027200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1715126400,"expirationTimestamp":1717027200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":69,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715126400,"expirationTimestamp":1717027200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715126400,"expirationTimestamp":1716768000},{"cardType":"business","rewardPercentage":5,"startTimestamp":1715126400,"expirationTimestamp":1717200000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":9,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715212800,"expirationTimestamp":1717200000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":90,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715212800,"expirationTimestamp":1716508800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715212800,"expirationTimestamp":1716854400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":22,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715212800,"expirationTimestamp":1716508800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":21,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715212800,"expirationTimestamp":1716940800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1715212800,"expirationTimestamp":1716940800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":40,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715212800,"expirationTimestamp":1716854400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1715212800,"expirationTimestamp":1717113600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":59,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1715299200,"expirationTimestamp":1717027200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715299200,"expirationTimestamp":1716768000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":68,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715299200,"expirationTimestamp":1716422400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":84,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715299200,"expirationTimestamp":1717027200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":29,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1715299200,"expirationTimestamp":1716508800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":82,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715299200,"expirationTimestamp":1716940800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":85,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1715385600,"expirationTimestamp":1717372800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":26,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715385600,"expirationTimestamp":1716508800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":29,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1715385600,"expirationTimestamp":1717027200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":18,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715472000,"expirationTimestamp":1717200000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715472000,"expirationTimestamp":1717545600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1715472000,"expirationTimestamp":1717200000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":71,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1715472000,"expirationTimestamp":1717286400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715472000,"expirationTimestamp":1717372800},{"cardType":"business","rewardPercentage":5,"startTimestamp":1715472000,"expirationTimestamp":1717459200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":42,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715558400,"expirationTimestamp":1717113600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1715558400,"expirationTimestamp":1717545600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1715558400,"expirationTimestamp":1717200000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":92,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715558400,"expirationTimestamp":1717027200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715558400,"expirationTimestamp":1717804800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":82,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1715558400,"expirationTimestamp":1717200000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":46,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1715644800,"expirationTimestamp":1717632000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":33,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1715731200,"expirationTimestamp":1717545600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":96,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715731200,"expirationTimestamp":1717718400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715731200,"expirationTimestamp":1717286400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":12,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715731200,"expirationTimestamp":1717372800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":63,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1715817600,"expirationTimestamp":1717027200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":32,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715817600,"expirationTimestamp":1717718400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1715817600,"expirationTimestamp":1718064000},{"cardType":"business","rewardPercentage":5,"startTimestamp":1715817600,"expirationTimestamp":1717372800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":25,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715817600,"expirationTimestamp":1717372800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1715817600,"expirationTimestamp":1717977600},{"cardType":"business","rewardPercentage":15,"startTimestamp":1715817600,"expirationTimestamp":1717718400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":10,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715817600,"expirationTimestamp":1717286400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1715817600,"expirationTimestamp":1717632000},{"cardType":"business","rewardPercentage":15,"startTimestamp":1715817600,"expirationTimestamp":1717545600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":42,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1715904000,"expirationTimestamp":1717718400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715904000,"expirationTimestamp":1717459200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":27,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715904000,"expirationTimestamp":1717718400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1715904000,"expirationTimestamp":1717804800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":74,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715904000,"expirationTimestamp":1717891200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1715904000,"expirationTimestamp":1717200000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":64,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715990400,"expirationTimestamp":1717718400},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1715990400,"expirationTimestamp":1718323200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":96,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1715990400,"expirationTimestamp":1717804800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1715990400,"expirationTimestamp":1717459200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":50,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1715990400,"expirationTimestamp":1717891200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":11,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1715990400,"expirationTimestamp":1717718400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1715990400,"expirationTimestamp":1717545600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":89,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716076800,"expirationTimestamp":1718064000},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716076800,"expirationTimestamp":1717891200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":55,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716076800,"expirationTimestamp":1717891200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1716076800,"expirationTimestamp":1717977600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1716076800,"expirationTimestamp":1717804800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":33,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716076800,"expirationTimestamp":1717718400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716076800,"expirationTimestamp":1717804800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":6,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716076800,"expirationTimestamp":1717632000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":46,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716076800,"expirationTimestamp":1717891200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716076800,"expirationTimestamp":1717718400},{"cardType":"business","rewardPercentage":15,"startTimestamp":1716076800,"expirationTimestamp":1717545600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":23,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716163200,"expirationTimestamp":1717632000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":41,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716163200,"expirationTimestamp":1717718400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":60,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1716163200,"expirationTimestamp":1717804800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716163200,"expirationTimestamp":1717545600},{"cardType":"business","rewardPercentage":20,"startTimestamp":1716163200,"expirationTimestamp":1717977600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":50,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1716163200,"expirationTimestamp":1717891200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716163200,"expirationTimestamp":1717632000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":25,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716163200,"expirationTimestamp":1717804800},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1716163200,"expirationTimestamp":1718150400},{"cardType":"business","rewardPercentage":10,"startTimestamp":1716163200,"expirationTimestamp":1718236800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":26,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716163200,"expirationTimestamp":1717804800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":10,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1716163200,"expirationTimestamp":1717977600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716163200,"expirationTimestamp":1717977600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":19,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716163200,"expirationTimestamp":1717804800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716163200,"expirationTimestamp":1717804800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":39,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716249600,"expirationTimestamp":1718236800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716249600,"expirationTimestamp":1718496000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":20,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716249600,"expirationTimestamp":1717718400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716249600,"expirationTimestamp":1717804800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":25,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1716249600,"expirationTimestamp":1717632000},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716249600,"expirationTimestamp":1717632000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":32,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716336000,"expirationTimestamp":1717977600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716336000,"expirationTimestamp":1718150400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":43,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716336000,"expirationTimestamp":1717718400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716336000,"expirationTimestamp":1718236800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":22,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716422400,"expirationTimestamp":1718582400},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716422400,"expirationTimestamp":1718668800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":74,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1716422400,"expirationTimestamp":1717977600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716422400,"expirationTimestamp":1718409600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":38,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716422400,"expirationTimestamp":1718323200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716422400,"expirationTimestamp":1717545600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":5,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716422400,"expirationTimestamp":1717891200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716422400,"expirationTimestamp":1718064000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":34,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1716422400,"expirationTimestamp":1717891200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716422400,"expirationTimestamp":1718236800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":89,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716508800,"expirationTimestamp":1718236800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1716508800,"expirationTimestamp":1718236800},{"cardType":"business","rewardPercentage":5,"startTimestamp":1716508800,"expirationTimestamp":1717891200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":77,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716508800,"expirationTimestamp":1717891200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716508800,"expirationTimestamp":1718323200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":15,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1716508800,"expirationTimestamp":1717977600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716508800,"expirationTimestamp":1718150400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":53,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716508800,"expirationTimestamp":1718236800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":19,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1716508800,"expirationTimestamp":1717977600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716508800,"expirationTimestamp":1718064000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":56,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716508800,"expirationTimestamp":1718582400},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1716508800,"expirationTimestamp":1718409600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":99,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716595200,"expirationTimestamp":1718496000},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1716595200,"expirationTimestamp":1718323200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":95,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716595200,"expirationTimestamp":1718323200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":96,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716595200,"expirationTimestamp":1718409600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":50,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716595200,"expirationTimestamp":1718150400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":84,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716595200,"expirationTimestamp":1718323200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":21,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1716595200,"expirationTimestamp":1718150400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716595200,"expirationTimestamp":1718496000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":18,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716681600,"expirationTimestamp":1718236800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716681600,"expirationTimestamp":1717891200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":13,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716681600,"expirationTimestamp":1718236800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":57,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716768000,"expirationTimestamp":1718323200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":65,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716768000,"expirationTimestamp":1718323200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":48,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716768000,"expirationTimestamp":1718236800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716768000,"expirationTimestamp":1718150400},{"cardType":"business","rewardPercentage":10,"startTimestamp":1716768000,"expirationTimestamp":1718323200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":88,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716768000,"expirationTimestamp":1718928000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716768000,"expirationTimestamp":1718755200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":11,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716768000,"expirationTimestamp":1718755200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716768000,"expirationTimestamp":1718150400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":61,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716768000,"expirationTimestamp":1718409600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716768000,"expirationTimestamp":1718409600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":40,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1716768000,"expirationTimestamp":1718150400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":77,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716854400,"expirationTimestamp":1718496000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":71,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1716854400,"expirationTimestamp":1718755200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716854400,"expirationTimestamp":1718409600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1716854400,"expirationTimestamp":1718928000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":45,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716854400,"expirationTimestamp":1718409600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716854400,"expirationTimestamp":1718409600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1716854400,"expirationTimestamp":1718668800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":21,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716854400,"expirationTimestamp":1718409600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":86,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1716854400,"expirationTimestamp":1718323200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":66,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1716940800,"expirationTimestamp":1718582400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":62,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716940800,"expirationTimestamp":1718755200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":59,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716940800,"expirationTimestamp":1718323200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1716940800,"expirationTimestamp":1719100800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":37,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716940800,"expirationTimestamp":1718928000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":52,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716940800,"expirationTimestamp":1718841600},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1716940800,"expirationTimestamp":1718755200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":38,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1716940800,"expirationTimestamp":1718668800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1716940800,"expirationTimestamp":1718755200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":27,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1717027200,"expirationTimestamp":1718668800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1717027200,"expirationTimestamp":1719014400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":63,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1717027200,"expirationTimestamp":1718755200},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1717027200,"expirationTimestamp":1719014400},{"cardType":"business","rewardPercentage":10,"startTimestamp":1717027200,"expirationTimestamp":1718755200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":51,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1717027200,"expirationTimestamp":1718582400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":53,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1717027200,"expirationTimestamp":1718668800},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1717027200,"expirationTimestamp":1718668800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":31,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1717027200,"expirationTimestamp":1719187200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1717027200,"expirationTimestamp":1719014400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":20,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1717113600,"expirationTimestamp":1718841600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1717113600,"expirationTimestamp":1718841600},{"cardType":"business","rewardPercentage":5,"startTimestamp":1717113600,"expirationTimestamp":1719360000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":83,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1717113600,"expirationTimestamp":1719100800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1717113600,"expirationTimestamp":1719014400},{"cardType":"business","rewardPercentage":20,"startTimestamp":1717113600,"expirationTimestamp":1718841600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":3,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1717200000,"expirationTimestamp":1719100800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1717200000,"expirationTimestamp":1719100800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":67,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1717200000,"expirationTimestamp":1719100800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1717200000,"expirationTimestamp":1719100800},{"cardType":"business","rewardPercentage":20,"startTimestamp":1717200000,"expirationTimestamp":1719014400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":2,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1717200000,"expirationTimestamp":1718841600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":84,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1717200000,"expirationTimestamp":1719014400},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1717200000,"expirationTimestamp":1718841600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":4,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1717200000,"expirationTimestamp":1719360000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1717200000,"expirationTimestamp":1718755200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":98,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1717200000,"expirationTimestamp":1718755200},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1717200000,"expirationTimestamp":1718496000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":85,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1717286400,"expirationTimestamp":1718841600},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1717286400,"expirationTimestamp":1719014400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":13,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1717286400,"expirationTimestamp":1719100800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1717286400,"expirationTimestamp":1718841600},{"cardType":"business","rewardPercentage":5,"startTimestamp":1717286400,"expirationTimestamp":1719014400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":51,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1717286400,"expirationTimestamp":1719532800},{"cardType":"sports","rewardPercentage":15,"startTimestamp":1717286400,"expirationTimestamp":1718841600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1717286400,"expirationTimestamp":1718409600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":46,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1717286400,"expirationTimestamp":1719014400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1717286400,"expirationTimestamp":1718841600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":91,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1717372800,"expirationTimestamp":1718668800},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1717372800,"expirationTimestamp":1719360000},{"cardType":"business","rewardPercentage":10,"startTimestamp":1717372800,"expirationTimestamp":1719014400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":54,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1717372800,"expirationTimestamp":1719187200},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1717372800,"expirationTimestamp":1719273600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":3,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1717372800,"expirationTimestamp":1719187200},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1717372800,"expirationTimestamp":1718928000},{"cardType":"business","rewardPercentage":10,"startTimestamp":1717372800,"expirationTimestamp":1719100800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":33,"rewardsByCard":[{"cardType":"travel","rewardPercentage":20,"startTimestamp":1717372800,"expirationTimestamp":1718928000},{"cardType":"sports","rewardPercentage":20,"startTimestamp":1717372800,"expirationTimestamp":1718841600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":71,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1717372800,"expirationTimestamp":1719360000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1717372800,"expirationTimestamp":1718928000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":26,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1717372800,"expirationTimestamp":1719360000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1717372800,"expirationTimestamp":1718582400},{"cardType":"business","rewardPercentage":15,"startTimestamp":1717372800,"expirationTimestamp":1719273600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":76,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1717372800,"expirationTimestamp":1718841600}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":56,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1717372800,"expirationTimestamp":1718582400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1717372800,"expirationTimestamp":1719360000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":9,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1717459200,"expirationTimestamp":1719187200},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1717459200,"expirationTimestamp":1718841600},{"cardType":"business","rewardPercentage":10,"startTimestamp":1717459200,"expirationTimestamp":1719792000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":24,"rewardsByCard":[{"cardType":"travel","rewardPercentage":15,"startTimestamp":1717459200,"expirationTimestamp":1719705600},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1717459200,"expirationTimestamp":1719360000}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":48,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1717459200,"expirationTimestamp":1718496000},{"cardType":"sports","rewardPercentage":5,"startTimestamp":1717459200,"expirationTimestamp":1719100800}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":34,"rewardsByCard":[{"cardType":"travel","rewardPercentage":10,"startTimestamp":1717459200,"expirationTimestamp":1719360000},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1717459200,"expirationTimestamp":1719187200},{"cardType":"business","rewardPercentage":10,"startTimestamp":1717459200,"expirationTimestamp":1718582400}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":78,"rewardsByCard":[{"cardType":"travel","rewardPercentage":5,"startTimestamp":1717459200,"expirationTimestamp":1719014400},{"cardType":"sports","rewardPercentage":10,"startTimestamp":1717459200,"expirationTimestamp":1719187200}],"updatedTime":"2024-02-25T00:00:00Z"} -{"merchantId":101,"rewardsByCard":[{"cardType":"travel","rewardPercentage":0,"startTimestamp":0,"expirationTimestamp":0}],"updatedTime":"2024-06-05T00:00:00.000Z"} \ No newline at end of file diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/merchant_reward.table.sql b/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/merchant_reward.table.sql deleted file mode 100644 index 54943851..00000000 --- a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/merchant_reward.table.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE MerchantReward ( - merchantId BIGINT NOT NULL, - rewardsByCard ARRAY> NOT NULL, - updatedTime TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`merchantId`, `updatedTime`) NOT ENFORCED, - WATERMARK FOR `updatedTime` AS `updatedTime` - INTERVAL '1' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/merchant_reward.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/transaction.table.sql b/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/transaction.table.sql deleted file mode 100644 index 59dd317d..00000000 --- a/finance-credit-card-chatbot/credit-card-views/creditcard-testdata/transaction.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE Transaction ( - transactionId BIGINT NOT NULL, - cardNo STRING NOT NULL, - `time` TIMESTAMP_LTZ(3) NOT NULL, - amount DOUBLE NOT NULL, - merchantId BIGINT NOT NULL, - PRIMARY KEY (`transactionId`, `time`) NOT ENFORCED, - WATERMARK FOR `time` AS `time` - INTERVAL '1' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/transaction.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' - ); \ No newline at end of file diff --git a/finance-credit-card-chatbot/credit-card-views/creditcard_views.sqrl b/finance-credit-card-chatbot/credit-card-views/creditcard_views.sqrl index 482285ad..4de5069c 100644 --- a/finance-credit-card-chatbot/credit-card-views/creditcard_views.sqrl +++ b/finance-credit-card-chatbot/credit-card-views/creditcard_views.sqrl @@ -1,17 +1,15 @@ /* Import Data */ -IMPORT creditcard-{{variant}}.merchant AS _MerchantStream; -IMPORT creditcard-{{variant}}.card_assignment AS _CardAssignmentStream; -IMPORT creditcard-{{variant}}.transaction AS _Transaction; +IMPORT connectors.sources-{{variant}} AS sources; /* Deduplicate CDC Streams */ -_Merchant := DISTINCT _MerchantStream ON merchantId ORDER BY updatedTime DESC; -_CardAssignment := DISTINCT _CardAssignmentStream ON cardNo ORDER BY `timestamp` DESC; +_Merchant := DISTINCT sources.Merchant ON merchantId ORDER BY updatedTime DESC; +_CardAssignment := DISTINCT sources.CardAssignment ON cardNo ORDER BY `timestamp` DESC; /* Enrich credit card transactions with customer and merchant information */ /*+partition_key(customerId) */ _CustomerTransaction := SELECT t.transactionId, t.cardNo, t.`time`, t.amount, m.category, c.customerId, m.merchantId - FROM _Transaction t + FROM sources.Transaction t JOIN _CardAssignment FOR SYSTEM_TIME AS OF t.`time` c ON t.cardNo = c.cardNo JOIN _Merchant FOR SYSTEM_TIME AS OF t.`time` m ON t.merchantId = m.merchantId; diff --git a/getting-started-examples/01_kafka_to_console/data-generator/.nodiscovery b/getting-started-examples/01_kafka_to_console/data-generator/.nodiscovery deleted file mode 100644 index e69de29b..00000000 diff --git a/getting-started-examples/02_kafka_to_kafka/data-generator/.nodiscovery b/getting-started-examples/02_kafka_to_kafka/data-generator/.nodiscovery deleted file mode 100644 index e69de29b..00000000 diff --git a/healthcare-study/healthcare-study-analytics/study-testdata/README.md b/healthcare-study/healthcare-study-analytics/connectors/README.md similarity index 100% rename from healthcare-study/healthcare-study-analytics/study-testdata/README.md rename to healthcare-study/healthcare-study-analytics/connectors/README.md diff --git a/healthcare-study/healthcare-study-analytics/connectors/sources-testdata.sqrl b/healthcare-study/healthcare-study-analytics/connectors/sources-testdata.sqrl new file mode 100644 index 00000000..ce671514 --- /dev/null +++ b/healthcare-study/healthcare-study-analytics/connectors/sources-testdata.sqrl @@ -0,0 +1,68 @@ +CREATE TABLE Metadata ( + `metadataId` BIGINT NOT NULL, + `name` STRING NOT NULL, + `lowRange` DOUBLE NOT NULL, + `highRange` DOUBLE NOT NULL, + `lastUpdated` TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`metadataId`, `lastUpdated`) NOT ENFORCED, + WATERMARK FOR `lastUpdated` AS `lastUpdated` - INTERVAL '0.001' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/metadata.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE ObservationGroup ( + `groupId` BIGINT NOT NULL, + `studyId` BIGINT NOT NULL, + `groupName` STRING NOT NULL, + `createdDate` TIMESTAMP_LTZ(3) NOT NULL, + `patients` ARRAY> NOT NULL, + PRIMARY KEY (`groupId`, `createdDate`) NOT ENFORCED, + WATERMARK FOR `createdDate` AS `createdDate` - INTERVAL '0.001' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/observation_group.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE Patients ( + `patientId` BIGINT NOT NULL, + `studyId` BIGINT NOT NULL, + `name` STRING NOT NULL, + `bloodGroup` STRING, + `dateOfBirth` STRING, + `diagnosis` STRING, + `lastUpdated` TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`patientId`, `lastUpdated`) NOT ENFORCED, + WATERMARK FOR `lastUpdated` AS `lastUpdated` - INTERVAL '0.001' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/patients.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE SensorPlacements ( + `sensorId` BIGINT NOT NULL, + `patientId` BIGINT NOT NULL, + `metadataId` BIGINT NOT NULL, + `eventId` STRING NOT NULL, + `placedTimestamp` TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`eventId`) NOT ENFORCED, + WATERMARK FOR `placedTimestamp` AS `placedTimestamp` - INTERVAL '0.001' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/sensor_placements.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE ClinicalIndicator ( + `timestamp` AS TO_TIMESTAMP_LTZ(`time`,3), + WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '0.001' SECOND +) WITH ( + 'source.monitor-interval' = '10 min' + ) LIKE `testdata/clinical_indicator.jsonl`; diff --git a/healthcare-study/healthcare-study-analytics/metrics-testdata/clinical_indicator.jsonl b/healthcare-study/healthcare-study-analytics/connectors/testdata/clinical_indicator.jsonl similarity index 100% rename from healthcare-study/healthcare-study-analytics/metrics-testdata/clinical_indicator.jsonl rename to healthcare-study/healthcare-study-analytics/connectors/testdata/clinical_indicator.jsonl diff --git a/healthcare-study/healthcare-study-analytics/study-testdata/metadata.jsonl b/healthcare-study/healthcare-study-analytics/connectors/testdata/metadata.jsonl similarity index 100% rename from healthcare-study/healthcare-study-analytics/study-testdata/metadata.jsonl rename to healthcare-study/healthcare-study-analytics/connectors/testdata/metadata.jsonl diff --git a/healthcare-study/healthcare-study-analytics/study-testdata/observation_group.jsonl b/healthcare-study/healthcare-study-analytics/connectors/testdata/observation_group.jsonl similarity index 100% rename from healthcare-study/healthcare-study-analytics/study-testdata/observation_group.jsonl rename to healthcare-study/healthcare-study-analytics/connectors/testdata/observation_group.jsonl diff --git a/healthcare-study/healthcare-study-analytics/study-testdata/patients.jsonl b/healthcare-study/healthcare-study-analytics/connectors/testdata/patients.jsonl similarity index 100% rename from healthcare-study/healthcare-study-analytics/study-testdata/patients.jsonl rename to healthcare-study/healthcare-study-analytics/connectors/testdata/patients.jsonl diff --git a/healthcare-study/healthcare-study-analytics/study-testdata/sensor_placements.jsonl b/healthcare-study/healthcare-study-analytics/connectors/testdata/sensor_placements.jsonl similarity index 100% rename from healthcare-study/healthcare-study-analytics/study-testdata/sensor_placements.jsonl rename to healthcare-study/healthcare-study-analytics/connectors/testdata/sensor_placements.jsonl diff --git a/healthcare-study/healthcare-study-analytics/metrics-testdata/clinical_indicator.table.sql b/healthcare-study/healthcare-study-analytics/metrics-testdata/clinical_indicator.table.sql deleted file mode 100644 index 90d09984..00000000 --- a/healthcare-study/healthcare-study-analytics/metrics-testdata/clinical_indicator.table.sql +++ /dev/null @@ -1,9 +0,0 @@ -CREATE TABLE ClinicalIndicator ( - `timestamp` AS TO_TIMESTAMP_LTZ(`time`,3), - WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/clinical_indicator.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -) LIKE `clinical_indicator.avsc`; diff --git a/healthcare-study/healthcare-study-analytics/study-testdata/metadata.table.sql b/healthcare-study/healthcare-study-analytics/study-testdata/metadata.table.sql deleted file mode 100644 index a6f33082..00000000 --- a/healthcare-study/healthcare-study-analytics/study-testdata/metadata.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE Metadata ( - `metadataId` BIGINT NOT NULL, - `name` STRING NOT NULL, - `lowRange` DOUBLE NOT NULL, - `highRange` DOUBLE NOT NULL, - `lastUpdated` TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`metadataId`, `lastUpdated`) NOT ENFORCED, - WATERMARK FOR `lastUpdated` AS `lastUpdated` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/metadata.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/healthcare-study/healthcare-study-analytics/study-testdata/observation_group.table.sql b/healthcare-study/healthcare-study-analytics/study-testdata/observation_group.table.sql deleted file mode 100644 index 72449b4b..00000000 --- a/healthcare-study/healthcare-study-analytics/study-testdata/observation_group.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE ObservationGroup ( - `groupId` BIGINT NOT NULL, - `studyId` BIGINT NOT NULL, - `groupName` STRING NOT NULL, - `createdDate` TIMESTAMP_LTZ(3) NOT NULL, - `patients` ARRAY> NOT NULL, - PRIMARY KEY (`groupId`, `createdDate`) NOT ENFORCED, - WATERMARK FOR `createdDate` AS `createdDate` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/observation_group.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/healthcare-study/healthcare-study-analytics/study-testdata/patients.table.sql b/healthcare-study/healthcare-study-analytics/study-testdata/patients.table.sql deleted file mode 100644 index f4dd4b59..00000000 --- a/healthcare-study/healthcare-study-analytics/study-testdata/patients.table.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE TABLE Patients ( - `patientId` BIGINT NOT NULL, - `studyId` BIGINT NOT NULL, - `name` STRING NOT NULL, - `bloodGroup` STRING, - `dateOfBirth` STRING, - `diagnosis` STRING, - `lastUpdated` TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`patientId`, `lastUpdated`) NOT ENFORCED, - WATERMARK FOR `lastUpdated` AS `lastUpdated` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/patients.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); \ No newline at end of file diff --git a/healthcare-study/healthcare-study-analytics/study-testdata/sensor_placements.table.sql b/healthcare-study/healthcare-study-analytics/study-testdata/sensor_placements.table.sql deleted file mode 100644 index 2b23e1a0..00000000 --- a/healthcare-study/healthcare-study-analytics/study-testdata/sensor_placements.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE SensorPlacements ( - `sensorId` BIGINT NOT NULL, - `patientId` BIGINT NOT NULL, - `metadataId` BIGINT NOT NULL, - `eventId` STRING NOT NULL, - `placedTimestamp` TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`eventId`) NOT ENFORCED, - WATERMARK FOR `placedTimestamp` AS `placedTimestamp` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/sensor_placements.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/healthcare-study/healthcare-study-analytics/study_analytics.sqrl b/healthcare-study/healthcare-study-analytics/study_analytics.sqrl index a5a2354d..8a3bf292 100644 --- a/healthcare-study/healthcare-study-analytics/study_analytics.sqrl +++ b/healthcare-study/healthcare-study-analytics/study_analytics.sqrl @@ -1,11 +1,10 @@ -IMPORT study-testdata.* AS _CDC_; -IMPORT metrics-testdata.clinical_indicator AS _ClinicalIndicator; +IMPORT connectors.sources-testdata.*; -_SensorPlacements := DISTINCT _CDC_SensorPlacements ON sensorId ORDER BY placedTimestamp DESC; -_Metadata := DISTINCT _CDC_Metadata ON metadataId ORDER BY lastUpdated DESC; -_Patients := DISTINCT _CDC_Patients ON patientId ORDER BY lastUpdated DESC; +_SensorPlacements := DISTINCT SensorPlacements ON sensorId ORDER BY placedTimestamp DESC; +_Metadata := DISTINCT Metadata ON metadataId ORDER BY lastUpdated DESC; +_Patients := DISTINCT Patients ON patientId ORDER BY lastUpdated DESC; -_EnrichedIndicators := SELECT * FROM _ClinicalIndicator m +_EnrichedIndicators := SELECT * FROM ClinicalIndicator m JOIN _SensorPlacements FOR SYSTEM_TIME AS OF m.`timestamp` p ON m.sensorId = p.sensorId JOIN _Metadata FOR SYSTEM_TIME AS OF m.`timestamp` d ON d.metadataId = p.metadataId JOIN _Patients FOR SYSTEM_TIME AS OF m.`timestamp` pt ON p.patientId = pt.patientId; @@ -16,7 +15,7 @@ _PatientMetricsHourly := SELECT studyId, patientId, window_time AS timeHour, met FROM TABLE(TUMBLE(TABLE _EnrichedIndicators, DESCRIPTOR(`timestamp`), INTERVAL '1' HOUR)) GROUP BY studyId, patientId, metadataId, name, window_start, window_end, window_time; -_ObservationGroup := DISTINCT _CDC_ObservationGroup ON groupId ORDER BY createdDate DESC; +_ObservationGroup := DISTINCT ObservationGroup ON groupId ORDER BY createdDate DESC; /*+primary_key(groupId, patientId), partition_key */ _ObservationGroupMembership := SELECT groupId, groupName, studyId, p.patientId FROM _ObservationGroup g CROSS JOIN UNNEST(g.patients) p(patientId); diff --git a/healthcare-study/healthcare-study-api/study-testdata/README.md b/healthcare-study/healthcare-study-api/connectors/README.md similarity index 100% rename from healthcare-study/healthcare-study-api/study-testdata/README.md rename to healthcare-study/healthcare-study-api/connectors/README.md diff --git a/healthcare-study/healthcare-study-api/connectors/metrics-api.sqrl b/healthcare-study/healthcare-study-api/connectors/metrics-api.sqrl new file mode 100644 index 00000000..61a9f410 --- /dev/null +++ b/healthcare-study/healthcare-study-api/connectors/metrics-api.sqrl @@ -0,0 +1,5 @@ +CREATE TABLE ClinicalIndicator ( + sensorId BIGINT NOT NULL, + metric DOUBLE NOT NULL, + `timestamp` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp' +); diff --git a/healthcare-study/healthcare-study-api/metrics-testdata/clinical_indicator.table.sql b/healthcare-study/healthcare-study-api/connectors/metrics-testdata.sqrl similarity index 55% rename from healthcare-study/healthcare-study-api/metrics-testdata/clinical_indicator.table.sql rename to healthcare-study/healthcare-study-api/connectors/metrics-testdata.sqrl index 90d09984..2793e8e7 100644 --- a/healthcare-study/healthcare-study-api/metrics-testdata/clinical_indicator.table.sql +++ b/healthcare-study/healthcare-study-api/connectors/metrics-testdata.sqrl @@ -1,9 +1,9 @@ CREATE TABLE ClinicalIndicator ( - `timestamp` AS TO_TIMESTAMP_LTZ(`time`,3), - WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '0.001' SECOND + `timestamp` AS TO_TIMESTAMP_LTZ(`time`,3), + WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '0.001' SECOND ) WITH ( 'format' = 'flexible-json', 'path' = '${DATA_PATH}/clinical_indicator.jsonl', 'source.monitor-interval' = '10 min', 'connector' = 'filesystem' -) LIKE `clinical_indicator.avsc`; + ) LIKE `testdata/clinical_indicator.jsonl`; diff --git a/healthcare-study/healthcare-study-api/connectors/study-testdata.sqrl b/healthcare-study/healthcare-study-api/connectors/study-testdata.sqrl new file mode 100644 index 00000000..909b156a --- /dev/null +++ b/healthcare-study/healthcare-study-api/connectors/study-testdata.sqrl @@ -0,0 +1,61 @@ +CREATE TABLE Metadata ( + `metadataId` BIGINT NOT NULL, + `name` STRING NOT NULL, + `lowRange` DOUBLE NOT NULL, + `highRange` DOUBLE NOT NULL, + `lastUpdated` TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`metadataId`, `lastUpdated`) NOT ENFORCED, + WATERMARK FOR `lastUpdated` AS `lastUpdated` - INTERVAL '0.001' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/metadata.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE ObservationGroup ( + `groupId` BIGINT NOT NULL, + `studyId` BIGINT NOT NULL, + `groupName` STRING NOT NULL, + `createdDate` TIMESTAMP_LTZ(3) NOT NULL, + `patients` ARRAY> NOT NULL, + PRIMARY KEY (`groupId`, `createdDate`) NOT ENFORCED, + WATERMARK FOR `createdDate` AS `createdDate` - INTERVAL '0.001' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/observation_group.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE Patients ( + `patientId` BIGINT NOT NULL, + `studyId` BIGINT NOT NULL, + `name` STRING NOT NULL, + `bloodGroup` STRING, + `dateOfBirth` STRING, + `diagnosis` STRING, + `lastUpdated` TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`patientId`, `lastUpdated`) NOT ENFORCED, + WATERMARK FOR `lastUpdated` AS `lastUpdated` - INTERVAL '0.001' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/patients.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE SensorPlacements ( + `sensorId` BIGINT NOT NULL, + `patientId` BIGINT NOT NULL, + `metadataId` BIGINT NOT NULL, + `eventId` STRING NOT NULL, + `placedTimestamp` TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`eventId`) NOT ENFORCED, + WATERMARK FOR `placedTimestamp` AS `placedTimestamp` - INTERVAL '0.001' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/sensor_placements.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); diff --git a/healthcare-study/healthcare-study-api/metrics-testdata/clinical_indicator.jsonl b/healthcare-study/healthcare-study-api/connectors/testdata/clinical_indicator.jsonl similarity index 100% rename from healthcare-study/healthcare-study-api/metrics-testdata/clinical_indicator.jsonl rename to healthcare-study/healthcare-study-api/connectors/testdata/clinical_indicator.jsonl diff --git a/healthcare-study/healthcare-study-api/study-testdata/metadata.jsonl b/healthcare-study/healthcare-study-api/connectors/testdata/metadata.jsonl similarity index 100% rename from healthcare-study/healthcare-study-api/study-testdata/metadata.jsonl rename to healthcare-study/healthcare-study-api/connectors/testdata/metadata.jsonl diff --git a/healthcare-study/healthcare-study-api/study-testdata/observation_group.jsonl b/healthcare-study/healthcare-study-api/connectors/testdata/observation_group.jsonl similarity index 100% rename from healthcare-study/healthcare-study-api/study-testdata/observation_group.jsonl rename to healthcare-study/healthcare-study-api/connectors/testdata/observation_group.jsonl diff --git a/healthcare-study/healthcare-study-api/study-testdata/patients.jsonl b/healthcare-study/healthcare-study-api/connectors/testdata/patients.jsonl similarity index 100% rename from healthcare-study/healthcare-study-api/study-testdata/patients.jsonl rename to healthcare-study/healthcare-study-api/connectors/testdata/patients.jsonl diff --git a/healthcare-study/healthcare-study-api/study-testdata/sensor_placements.jsonl b/healthcare-study/healthcare-study-api/connectors/testdata/sensor_placements.jsonl similarity index 100% rename from healthcare-study/healthcare-study-api/study-testdata/sensor_placements.jsonl rename to healthcare-study/healthcare-study-api/connectors/testdata/sensor_placements.jsonl diff --git a/healthcare-study/healthcare-study-api/metrics-api/clinical_indicator.table.sql b/healthcare-study/healthcare-study-api/metrics-api/clinical_indicator.table.sql deleted file mode 100644 index 6d7080f0..00000000 --- a/healthcare-study/healthcare-study-api/metrics-api/clinical_indicator.table.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE ClinicalIndicator ( - sensorId BIGINT NOT NULL, - metric DOUBLE NOT NULL, - `timestamp` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp' -); \ No newline at end of file diff --git a/healthcare-study/healthcare-study-api/metrics-testdata/clinical_indicator.avsc b/healthcare-study/healthcare-study-api/metrics-testdata/clinical_indicator.avsc deleted file mode 100644 index aeb121d6..00000000 --- a/healthcare-study/healthcare-study-api/metrics-testdata/clinical_indicator.avsc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "record", - "name": "measurements", - "namespace": "com.datasqrl.examples.healthcare", - "fields": [ - { - "name": "sensorId", - "type": "long" - }, - { - "name": "time", - "type": "long" - }, - { - "name": "metric", - "type": "double" - } - ] -} \ No newline at end of file diff --git a/healthcare-study/healthcare-study-api/study-testdata/metadata.table.sql b/healthcare-study/healthcare-study-api/study-testdata/metadata.table.sql deleted file mode 100644 index a6f33082..00000000 --- a/healthcare-study/healthcare-study-api/study-testdata/metadata.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE Metadata ( - `metadataId` BIGINT NOT NULL, - `name` STRING NOT NULL, - `lowRange` DOUBLE NOT NULL, - `highRange` DOUBLE NOT NULL, - `lastUpdated` TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`metadataId`, `lastUpdated`) NOT ENFORCED, - WATERMARK FOR `lastUpdated` AS `lastUpdated` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/metadata.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/healthcare-study/healthcare-study-api/study-testdata/observation_group.table.sql b/healthcare-study/healthcare-study-api/study-testdata/observation_group.table.sql deleted file mode 100644 index 72449b4b..00000000 --- a/healthcare-study/healthcare-study-api/study-testdata/observation_group.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE ObservationGroup ( - `groupId` BIGINT NOT NULL, - `studyId` BIGINT NOT NULL, - `groupName` STRING NOT NULL, - `createdDate` TIMESTAMP_LTZ(3) NOT NULL, - `patients` ARRAY> NOT NULL, - PRIMARY KEY (`groupId`, `createdDate`) NOT ENFORCED, - WATERMARK FOR `createdDate` AS `createdDate` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/observation_group.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/healthcare-study/healthcare-study-api/study-testdata/patients.table.sql b/healthcare-study/healthcare-study-api/study-testdata/patients.table.sql deleted file mode 100644 index f4dd4b59..00000000 --- a/healthcare-study/healthcare-study-api/study-testdata/patients.table.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE TABLE Patients ( - `patientId` BIGINT NOT NULL, - `studyId` BIGINT NOT NULL, - `name` STRING NOT NULL, - `bloodGroup` STRING, - `dateOfBirth` STRING, - `diagnosis` STRING, - `lastUpdated` TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`patientId`, `lastUpdated`) NOT ENFORCED, - WATERMARK FOR `lastUpdated` AS `lastUpdated` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/patients.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); \ No newline at end of file diff --git a/healthcare-study/healthcare-study-api/study-testdata/sensor_placements.table.sql b/healthcare-study/healthcare-study-api/study-testdata/sensor_placements.table.sql deleted file mode 100644 index 2b23e1a0..00000000 --- a/healthcare-study/healthcare-study-api/study-testdata/sensor_placements.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE SensorPlacements ( - `sensorId` BIGINT NOT NULL, - `patientId` BIGINT NOT NULL, - `metadataId` BIGINT NOT NULL, - `eventId` STRING NOT NULL, - `placedTimestamp` TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`eventId`) NOT ENFORCED, - WATERMARK FOR `placedTimestamp` AS `placedTimestamp` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/sensor_placements.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/healthcare-study/healthcare-study-api/study_api.sqrl b/healthcare-study/healthcare-study-api/study_api.sqrl index a8d5faac..b5f8b325 100644 --- a/healthcare-study/healthcare-study-api/study_api.sqrl +++ b/healthcare-study/healthcare-study-api/study_api.sqrl @@ -1,12 +1,10 @@ -IMPORT study-testdata.* AS _CDC_; +IMPORT connectors.study-testdata.*; +IMPORT connectors.metrics-{{variant}}.*; -/*+no_query */ -IMPORT metrics-{{variant}}.clinical_indicator AS AddClinicalData; - -_ClinicalIndicator := SELECT sensorId, metric, `timestamp` FROM AddClinicalData; +_ClinicalIndicator := SELECT sensorId, metric, `timestamp` FROM ClinicalIndicator; -_SensorPlacements := DISTINCT _CDC_SensorPlacements ON sensorId ORDER BY placedTimestamp DESC; -_Metadata := DISTINCT _CDC_Metadata ON metadataId ORDER BY lastUpdated DESC; +_SensorPlacements := DISTINCT SensorPlacements ON sensorId ORDER BY placedTimestamp DESC; +_Metadata := DISTINCT Metadata ON metadataId ORDER BY lastUpdated DESC; _EnrichedIndicators := SELECT * FROM _ClinicalIndicator m JOIN _SensorPlacements FOR SYSTEM_TIME AS OF m.`timestamp` p ON m.sensorId = p.sensorId @@ -36,10 +34,10 @@ PatientMetricsHourlyTest := SELECT timeHour, name, avgMetric FROM PatientMetrics clinical data aggregated hourly. */ /*+query_by_any(patientId) */ -Patients := DISTINCT _CDC_Patients ON patientId ORDER BY lastUpdated DESC; -Patients.metrics := SELECT * FROM PatientMetricsHourly m WHERE m.patientId = this.patientId ORDER BY m.timeHour DESC, m.name ASC; +PatientsDist := DISTINCT Patients ON patientId ORDER BY lastUpdated DESC; +PatientsDist.metrics := SELECT * FROM PatientMetricsHourly m WHERE m.patientId = this.patientId ORDER BY m.timeHour DESC, m.name ASC; /** Returns a patient by name with patient information and recently recorded clinical data aggregated hourly. */ -PatientsByName(name STRING NOT NULL) := SELECT * FROM Patients WHERE name = :name; +PatientsByName(name STRING NOT NULL) := SELECT * FROM PatientsDist WHERE name = :name; diff --git a/healthcare-study/healthcare-study-stream/study-testdata/README.md b/healthcare-study/healthcare-study-stream/connectors/README.md similarity index 100% rename from healthcare-study/healthcare-study-stream/study-testdata/README.md rename to healthcare-study/healthcare-study-stream/connectors/README.md diff --git a/healthcare-study/healthcare-study-analytics/metrics-testdata/clinical_indicator.avsc b/healthcare-study/healthcare-study-stream/connectors/clinical_indicator.avsc similarity index 100% rename from healthcare-study/healthcare-study-analytics/metrics-testdata/clinical_indicator.avsc rename to healthcare-study/healthcare-study-stream/connectors/clinical_indicator.avsc diff --git a/healthcare-study/healthcare-study-stream/metrics-kafka/enriched_indicator.table.sql b/healthcare-study/healthcare-study-stream/connectors/enriched_indicator_kafka.table.sql similarity index 81% rename from healthcare-study/healthcare-study-stream/metrics-kafka/enriched_indicator.table.sql rename to healthcare-study/healthcare-study-stream/connectors/enriched_indicator_kafka.table.sql index 0b344d3c..b9ef8ffb 100644 --- a/healthcare-study/healthcare-study-stream/metrics-kafka/enriched_indicator.table.sql +++ b/healthcare-study/healthcare-study-stream/connectors/enriched_indicator_kafka.table.sql @@ -1,5 +1,5 @@ CREATE TABLE EnrichedIndicators ( - WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '5' SECOND + WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '5' SECOND ) WITH ( 'connector' = 'kafka', 'topic' = 'enrichedindicators', @@ -9,4 +9,4 @@ CREATE TABLE EnrichedIndicators ( 'value.format' = 'flexible-json', 'key.format' = 'raw', 'key.fields' = 'patientId' -) LIKE `*`; + ) LIKE `*`; diff --git a/healthcare-study/healthcare-study-stream/metrics-testdata/enriched_indicator.table.sql b/healthcare-study/healthcare-study-stream/connectors/enriched_indicator_testdata.table.sql similarity index 93% rename from healthcare-study/healthcare-study-stream/metrics-testdata/enriched_indicator.table.sql rename to healthcare-study/healthcare-study-stream/connectors/enriched_indicator_testdata.table.sql index bc5f43b6..1b60613b 100644 --- a/healthcare-study/healthcare-study-stream/metrics-testdata/enriched_indicator.table.sql +++ b/healthcare-study/healthcare-study-stream/connectors/enriched_indicator_testdata.table.sql @@ -5,4 +5,4 @@ CREATE TABLE EnrichedIndicator ( 'path' = '${DATA_PATH}/enriched_indicator/', 'connector' = 'filesystem', 'flexible-json.timestamp-format.standard' = 'ISO-8601' -) LIKE `*`; + ) LIKE `*`; diff --git a/healthcare-study/healthcare-study-stream/metrics-kafka/clinical_indicator.table.sql b/healthcare-study/healthcare-study-stream/connectors/metrics_kafka.sqrl similarity index 54% rename from healthcare-study/healthcare-study-stream/metrics-kafka/clinical_indicator.table.sql rename to healthcare-study/healthcare-study-stream/connectors/metrics_kafka.sqrl index e4b008bd..0ad28305 100644 --- a/healthcare-study/healthcare-study-stream/metrics-kafka/clinical_indicator.table.sql +++ b/healthcare-study/healthcare-study-stream/connectors/metrics_kafka.sqrl @@ -1,6 +1,6 @@ CREATE TABLE ClinicalIndicator ( - `timestamp` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', - WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '0.001' SECOND + `timestamp` TIMESTAMP_LTZ(3) NOT NULL METADATA FROM 'timestamp', + WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '0.001' SECOND ) WITH ( 'connector' = 'kafka', 'topic' = 'indicators', @@ -8,4 +8,4 @@ CREATE TABLE ClinicalIndicator ( 'properties.group.id' = 'mygroup', 'scan.startup.mode' = 'earliest-offset', 'format' = 'flexible-json' -) LIKE `clinical_indicator.avsc`; + ) LIKE `clinical_indicator.avsc`; diff --git a/healthcare-study/healthcare-study-stream/metrics-testdata/clinical_indicator.table.sql b/healthcare-study/healthcare-study-stream/connectors/metrics_testdata.sqrl similarity index 55% rename from healthcare-study/healthcare-study-stream/metrics-testdata/clinical_indicator.table.sql rename to healthcare-study/healthcare-study-stream/connectors/metrics_testdata.sqrl index 90d09984..2793e8e7 100644 --- a/healthcare-study/healthcare-study-stream/metrics-testdata/clinical_indicator.table.sql +++ b/healthcare-study/healthcare-study-stream/connectors/metrics_testdata.sqrl @@ -1,9 +1,9 @@ CREATE TABLE ClinicalIndicator ( - `timestamp` AS TO_TIMESTAMP_LTZ(`time`,3), - WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '0.001' SECOND + `timestamp` AS TO_TIMESTAMP_LTZ(`time`,3), + WATERMARK FOR `timestamp` AS `timestamp` - INTERVAL '0.001' SECOND ) WITH ( 'format' = 'flexible-json', 'path' = '${DATA_PATH}/clinical_indicator.jsonl', 'source.monitor-interval' = '10 min', 'connector' = 'filesystem' -) LIKE `clinical_indicator.avsc`; + ) LIKE `testdata/clinical_indicator.jsonl`; diff --git a/healthcare-study/healthcare-study-stream/connectors/study_testdata.sqrl b/healthcare-study/healthcare-study-stream/connectors/study_testdata.sqrl new file mode 100644 index 00000000..909b156a --- /dev/null +++ b/healthcare-study/healthcare-study-stream/connectors/study_testdata.sqrl @@ -0,0 +1,61 @@ +CREATE TABLE Metadata ( + `metadataId` BIGINT NOT NULL, + `name` STRING NOT NULL, + `lowRange` DOUBLE NOT NULL, + `highRange` DOUBLE NOT NULL, + `lastUpdated` TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`metadataId`, `lastUpdated`) NOT ENFORCED, + WATERMARK FOR `lastUpdated` AS `lastUpdated` - INTERVAL '0.001' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/metadata.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE ObservationGroup ( + `groupId` BIGINT NOT NULL, + `studyId` BIGINT NOT NULL, + `groupName` STRING NOT NULL, + `createdDate` TIMESTAMP_LTZ(3) NOT NULL, + `patients` ARRAY> NOT NULL, + PRIMARY KEY (`groupId`, `createdDate`) NOT ENFORCED, + WATERMARK FOR `createdDate` AS `createdDate` - INTERVAL '0.001' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/observation_group.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE Patients ( + `patientId` BIGINT NOT NULL, + `studyId` BIGINT NOT NULL, + `name` STRING NOT NULL, + `bloodGroup` STRING, + `dateOfBirth` STRING, + `diagnosis` STRING, + `lastUpdated` TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`patientId`, `lastUpdated`) NOT ENFORCED, + WATERMARK FOR `lastUpdated` AS `lastUpdated` - INTERVAL '0.001' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/patients.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); + +CREATE TABLE SensorPlacements ( + `sensorId` BIGINT NOT NULL, + `patientId` BIGINT NOT NULL, + `metadataId` BIGINT NOT NULL, + `eventId` STRING NOT NULL, + `placedTimestamp` TIMESTAMP_LTZ(3) NOT NULL, + PRIMARY KEY (`eventId`) NOT ENFORCED, + WATERMARK FOR `placedTimestamp` AS `placedTimestamp` - INTERVAL '0.001' SECOND +) WITH ( + 'format' = 'flexible-json', + 'path' = '${DATA_PATH}/sensor_placements.jsonl', + 'source.monitor-interval' = '10 min', + 'connector' = 'filesystem' + ); diff --git a/healthcare-study/healthcare-study-stream/metrics-testdata/clinical_indicator.jsonl b/healthcare-study/healthcare-study-stream/connectors/testdata/clinical_indicator.jsonl similarity index 100% rename from healthcare-study/healthcare-study-stream/metrics-testdata/clinical_indicator.jsonl rename to healthcare-study/healthcare-study-stream/connectors/testdata/clinical_indicator.jsonl diff --git a/healthcare-study/healthcare-study-stream/study-testdata/metadata.jsonl b/healthcare-study/healthcare-study-stream/connectors/testdata/metadata.jsonl similarity index 100% rename from healthcare-study/healthcare-study-stream/study-testdata/metadata.jsonl rename to healthcare-study/healthcare-study-stream/connectors/testdata/metadata.jsonl diff --git a/healthcare-study/healthcare-study-stream/study-testdata/observation_group.jsonl b/healthcare-study/healthcare-study-stream/connectors/testdata/observation_group.jsonl similarity index 100% rename from healthcare-study/healthcare-study-stream/study-testdata/observation_group.jsonl rename to healthcare-study/healthcare-study-stream/connectors/testdata/observation_group.jsonl diff --git a/healthcare-study/healthcare-study-stream/study-testdata/patients.jsonl b/healthcare-study/healthcare-study-stream/connectors/testdata/patients.jsonl similarity index 100% rename from healthcare-study/healthcare-study-stream/study-testdata/patients.jsonl rename to healthcare-study/healthcare-study-stream/connectors/testdata/patients.jsonl diff --git a/healthcare-study/healthcare-study-stream/study-testdata/sensor_placements.jsonl b/healthcare-study/healthcare-study-stream/connectors/testdata/sensor_placements.jsonl similarity index 100% rename from healthcare-study/healthcare-study-stream/study-testdata/sensor_placements.jsonl rename to healthcare-study/healthcare-study-stream/connectors/testdata/sensor_placements.jsonl diff --git a/healthcare-study/healthcare-study-stream/metrics-kafka/clinical_indicator.avsc b/healthcare-study/healthcare-study-stream/metrics-kafka/clinical_indicator.avsc deleted file mode 100644 index aeb121d6..00000000 --- a/healthcare-study/healthcare-study-stream/metrics-kafka/clinical_indicator.avsc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "record", - "name": "measurements", - "namespace": "com.datasqrl.examples.healthcare", - "fields": [ - { - "name": "sensorId", - "type": "long" - }, - { - "name": "time", - "type": "long" - }, - { - "name": "metric", - "type": "double" - } - ] -} \ No newline at end of file diff --git a/healthcare-study/healthcare-study-stream/metrics-testdata/clinical_indicator.avsc b/healthcare-study/healthcare-study-stream/metrics-testdata/clinical_indicator.avsc deleted file mode 100644 index aeb121d6..00000000 --- a/healthcare-study/healthcare-study-stream/metrics-testdata/clinical_indicator.avsc +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "record", - "name": "measurements", - "namespace": "com.datasqrl.examples.healthcare", - "fields": [ - { - "name": "sensorId", - "type": "long" - }, - { - "name": "time", - "type": "long" - }, - { - "name": "metric", - "type": "double" - } - ] -} \ No newline at end of file diff --git a/healthcare-study/healthcare-study-stream/study-testdata/metadata.table.sql b/healthcare-study/healthcare-study-stream/study-testdata/metadata.table.sql deleted file mode 100644 index a6f33082..00000000 --- a/healthcare-study/healthcare-study-stream/study-testdata/metadata.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE Metadata ( - `metadataId` BIGINT NOT NULL, - `name` STRING NOT NULL, - `lowRange` DOUBLE NOT NULL, - `highRange` DOUBLE NOT NULL, - `lastUpdated` TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`metadataId`, `lastUpdated`) NOT ENFORCED, - WATERMARK FOR `lastUpdated` AS `lastUpdated` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/metadata.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/healthcare-study/healthcare-study-stream/study-testdata/observation_group.table.sql b/healthcare-study/healthcare-study-stream/study-testdata/observation_group.table.sql deleted file mode 100644 index 72449b4b..00000000 --- a/healthcare-study/healthcare-study-stream/study-testdata/observation_group.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE ObservationGroup ( - `groupId` BIGINT NOT NULL, - `studyId` BIGINT NOT NULL, - `groupName` STRING NOT NULL, - `createdDate` TIMESTAMP_LTZ(3) NOT NULL, - `patients` ARRAY> NOT NULL, - PRIMARY KEY (`groupId`, `createdDate`) NOT ENFORCED, - WATERMARK FOR `createdDate` AS `createdDate` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/observation_group.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/healthcare-study/healthcare-study-stream/study-testdata/patients.table.sql b/healthcare-study/healthcare-study-stream/study-testdata/patients.table.sql deleted file mode 100644 index f4dd4b59..00000000 --- a/healthcare-study/healthcare-study-stream/study-testdata/patients.table.sql +++ /dev/null @@ -1,16 +0,0 @@ -CREATE TABLE Patients ( - `patientId` BIGINT NOT NULL, - `studyId` BIGINT NOT NULL, - `name` STRING NOT NULL, - `bloodGroup` STRING, - `dateOfBirth` STRING, - `diagnosis` STRING, - `lastUpdated` TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`patientId`, `lastUpdated`) NOT ENFORCED, - WATERMARK FOR `lastUpdated` AS `lastUpdated` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/patients.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); \ No newline at end of file diff --git a/healthcare-study/healthcare-study-stream/study-testdata/sensor_placements.table.sql b/healthcare-study/healthcare-study-stream/study-testdata/sensor_placements.table.sql deleted file mode 100644 index 2b23e1a0..00000000 --- a/healthcare-study/healthcare-study-stream/study-testdata/sensor_placements.table.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE SensorPlacements ( - `sensorId` BIGINT NOT NULL, - `patientId` BIGINT NOT NULL, - `metadataId` BIGINT NOT NULL, - `eventId` STRING NOT NULL, - `placedTimestamp` TIMESTAMP_LTZ(3) NOT NULL, - PRIMARY KEY (`eventId`) NOT ENFORCED, - WATERMARK FOR `placedTimestamp` AS `placedTimestamp` - INTERVAL '0.001' SECOND -) WITH ( - 'format' = 'flexible-json', - 'path' = '${DATA_PATH}/sensor_placements.jsonl', - 'source.monitor-interval' = '10 min', - 'connector' = 'filesystem' -); diff --git a/healthcare-study/healthcare-study-stream/study_stream.sqrl b/healthcare-study/healthcare-study-stream/study_stream.sqrl index d77c1e62..fe7b69d8 100644 --- a/healthcare-study/healthcare-study-stream/study_stream.sqrl +++ b/healthcare-study/healthcare-study-stream/study_stream.sqrl @@ -1,15 +1,14 @@ -IMPORT metrics-{{variant}}.clinical_indicator; -IMPORT study-testdata.sensor_placements AS _CDC_SensorPlacements; -IMPORT study-testdata.metadata AS _CDC_Metadata; +IMPORT connectors.study_testdata; +IMPORT connectors.metrics_{{variant}}.*; -SensorPlacements := DISTINCT _CDC_SensorPlacements ON sensorId ORDER BY placedTimestamp DESC; -Metadata := DISTINCT _CDC_Metadata ON metadataId ORDER BY lastUpdated DESC; +SensorPlacements := DISTINCT study_testdata.SensorPlacements ON sensorId ORDER BY placedTimestamp DESC; +Metadata := DISTINCT study_testdata.Metadata ON metadataId ORDER BY lastUpdated DESC; EnrichedIndicators := SELECT * FROM ClinicalIndicator m JOIN SensorPlacements FOR SYSTEM_TIME AS OF m.`timestamp` p ON m.sensorId = p.sensorId JOIN Metadata FOR SYSTEM_TIME AS OF m.`timestamp` d ON d.metadataId = p.metadataId; -EXPORT EnrichedIndicators TO metrics-{{variant}}.enriched_indicator; +EXPORT EnrichedIndicators TO connectors.enriched_indicator_{{variant}}; /*+test */ TotalTest := SELECT COUNT(1) AS total_num FROM EnrichedIndicators;