То, как я бы поступил, это определить, насколько точным я хотел быть. Например, если я найду столбец с 1 и 0, я определю его как двоичный файл или я должен определить его как целое число на случай, если в будущем появятся числа, отличные от 0 и 1.
Также вы собираетесь проанализировать все строки таблицы или только несколько строк в верхней части, прежде чем решить, какой тип данных использовать? В приведенном выше примере, вы можете иметь 0 и 1 в верхней части таблицы, но найти другие числа ближе к нижней части. Если вы решите просмотреть только верхние строки, вы можете быть менее строгими в отношении типа данных. Поэтому, если вы найдете только 0 и 1, вы можете определить поле как целое, а не двоичное. Это уменьшит вероятность ошибок при импорте данных.
Вы можете использовать логику примерно так:
for each row (and you can decide if you want to check all the rows or just a few)
if is_int() -> data field integer;
if is_float() -> data field is float;
if is_string()
if it is a date & time -> data field is datetime;
if it is a date without time -> data field is date;
else -> data field is varchar.
Надеюсь, это поможет. Удачи.