The Rich Interactive Test Database (RITdb) Streaming Datalog is a sucessor to the common STDF format for storing and now streaming test result data. The file container is based on the popular and easy to use SQLite format. The streaming protocol is over MQTT, a widely supported Industry Internet of Things (IIoT) network protocol. The RITdb format can be "windowed" or cut up into pieces and sent accross the network for real time monitoring and can be re-assembled for analysis. Similar to STDF, there are header, data, and summary pieces that correspond to the start of a lot, test results for some number of devices (typically up to 100), and a summary that pre-computes some essential lot statistics and totals based on the test results.
The RITdb specification is available for purchase from SEMI.org.
RITdb Helper
This Excel Workbook helps understand the "narrow" database structure with Entity descriptions on the datalog-info tab.
6 Columns: sequence = date/time int, entityID = "unique object" int, indexID = "object contents count" int, name = object variable name text, value = value of the variable none, value2 = additional info/meta info text (optional)
Common SQL Join Statements to Generate Common Tables:
List of all use case entity types available in the spec and if entity type is required or optional
select s2.value usecase, s1.specEntity ENTITY_TYPE, s2.value2 isRqdOrisOpt, s3.value2 description
from spec s1
join spec s2 on s1.entityID = s2.entityID and s2.name = 'specified.usecase'
join spec s3 on s1.entityID = s3.entityID and s3.name = 'specified.entity.type'
where s1.name = 'ENTITY_TYPE' and s1.value = 'ENTITY'
group by s2.value, s1.specEntity
List all key/values for information about the run/program
SELECT n0.entityID, n1.name, n1.value
FROM ritdb1 n0
JOIN ritdb1 n1 ON n0.entityID=n1.entityID
WHERE n0.name='ENTITY_TYPE' AND n0.value IN ('RUN_INFO','FILE_INFO','METADATA','PRODUCT_CELL_CONFIGURATION','CELL_INVENTORY')
ORDER BY n0.entityID,n1.name ASC
get list of result id and name
SELECT r1.value RESULT_ID, r2.value RESULT_NAME
FROM ritdb1 r0
JOIN ritdb1 r1 ON r0.entityID=r1.entityID AND r1.name='RESULT_ID'
JOIN ritdb1 r2 ON r0.entityID=r2.entityID AND r2.name='RESULT_NAME'
WHERE r0.name='ENTITY_TYPE' AND r0.value='RESULT_INFO'
ORDER BY r1.value ASC
get part result event information for some events.
SELECT r1.value PART_ID, r2.value PF, r3.value EVENT_TEST_TIME, r4.value EVENT_CYCLE_TIME, r6.value SITE_ID, r0.value PART_RESULT_EVENT_ORDER
FROM ritdb1 r0
LEFT JOIN ritdb1 r1 ON r0.entityId=r1.entityId AND r1.name='PART_ID'
LEFT JOIN ritdb1 r2 ON r0.entityId=r2.entityId AND r2.name='PF'
LEFT JOIN ritdb1 r3 ON r0.entityId=r3.entityId AND r3.name='EVENT_TEST_TIME'
LEFT JOIN ritdb1 r4 ON r0.entityId=r4.entityId AND r4.name='EVENT_CYCLE_TIME'
LEFT JOIN ritdb1 r5 ON r0.entityId=r5.entityId AND r5.name='SITE_INFO_EID'
LEFT JOIN ritdb1 r6 ON r5.value=r6.entityId AND r6.name='SITE_ID'
WHERE r0.name='PART_RESULT_EVENT_ORDER'
ORDER BY r0.value ASC
LIMIT 10
get disposition bin information per part
SELECT n1.value PART_ID, n9.value SUBSTRATE_ID, n6.value PART_X, n7.value PART_Y,
n3.value BIN_NAME, n4.value DISPOSITION_BIN, n5.value PF
FROM ritdb1 n0
JOIN ritdb1 n1 ON n0.entityID=n1.entityID AND n1.name='PART_ID'
JOIN ritdb1 n2 ON n0.entityID=n2.entityID AND n2.indexID='0' AND n2.name='DISPOSITION_BIN_EID'
JOIN ritdb1 n3 ON n2.value=n3.entityID AND n3.name='BIN_NAME'
JOIN ritdb1 n4 ON n3.entityID=n4.entityID AND n4.name='BIN_NUMBER'
JOIN ritdb1 n5 ON n3.entityID=n5.entityID AND n5.name='BIN_PF'
LEFT JOIN ritdb1 n6 ON n0.entityID=n6.entityID AND n6.name='PART_X'
LEFT JOIN ritdb1 n7 ON n0.entityID=n7.entityID AND n7.name='PART_Y'
LEFT JOIN ritdb1 n8 ON n0.entityID=n8.entityID AND n8.name='SUBSTRATE_EVENT_EID'
LEFT JOIN ritdb1 n9 ON n8.value=n9.entityID AND n9.name='SUBSTRATE_ID'
WHERE
n0.name='ENTITY_TYPE' AND n0.value='PART_INSTANCE_OUT'
ORDER BY n1.value ASC
get list of cell inventory class and id
SELECT r1.value CELL_INVENTORY_CLASS, r3.value CELL_INVENTORY_ID, r2.value CELL_INVENTORY_TYPE, r4.value SITE_GROUP
FROM ritdb1 r0
JOIN ritdb1 r1 ON r0.entityID=r1.entityID AND r1.name='CELL_INVENTORY_CLASS'
LEFT JOIN ritdb1 r2 ON r0.entityID=r2.entityID AND r2.name='CELL_INVENTORY_TYPE'
JOIN ritdb1 r3 ON r0.entityID=r3.entityID AND r3.name='CELL_INVENTORY_ID'
LEFT JOIN ritdb1 r4 ON r0.entityId=r4.entityId AND r4.name='SITE_GROUP'
WHERE r0.name='ENTITY_TYPE' AND r0.value IN ('CELL_INVENTORY')
ORDER BY r0.entityID,r1.name ASC