Apparently the schemas vary and not all ZABCDRECORD tables have ZTHUMBNAILIMAGEDATA for example. (#153)
So we have to dynamically build the query and the scan targets.
Then the birth date interpretation is complex too. A yearless birthdate is the number of seconds into a year, but the birthdayyear col will have a value of 1604 if it's unknown, instead of null.
The sorting can help imports go faster if we put DB-heavy sources first, when the database is still small.
The data source names were also standardized to use snake_case like most other word-IDs in the app.