in azure/Kqlmagic/parameterizer.py [0:0]
def _guess_object_types(cls, pairs_type:dict, r:list) -> dict:
new_pairs_type = {}
for idx, col in enumerate(pairs_type):
pair = pairs_type[col]
if pair[0] == "object":
ty = None
for row in r:
val = row[idx]
if val is not None:
cty = type(val)
if cty == str or str(val) not in ["nan", "NaT"]:
ty = ty or cty
if ty != cty or ty == str:
ty = str
break
if ty in [dict, list, set, tuple]:
try:
json_dumps(val)
except:
ty = str
break
if ty == str:
new_pairs_type[col] = [pair[0], "string"]
elif ty == bool:
new_pairs_type[col] = [pair[0], "bool"]
elif ty in [dict, list, set, tuple]:
new_pairs_type[col] = [pair[0], "dynamic"]
elif ty == int:
new_pairs_type[col] = [pair[0], "long"]
elif ty == float:
new_pairs_type[col] = [pair[0], "real"]
elif str(ty).split(".")[-1].startswith("datetime"):
new_pairs_type[col] = [pair[0], "datetime"]
elif str(ty).split(".")[-1].startswith("timedelta"):
new_pairs_type[col] = [pair[0], "timespan"]
elif ty == bytes:
new_pairs_type[col] = ["bytes", "string"]
else:
new_pairs_type[col] = [pair[0], "string"]
else:
new_pairs_type[col] = pair
return new_pairs_type