无法将数据加载至Snowflake表,遇“数值未识别”错误
在Databricks Python笔记本里用这段代码往Snowflake表导数据时出错:
CAST(O.ITEM_PRODUCT_NAME::TEXT AS VARCHAR) AS PRODUCT_NAME
错误提示:
100038 (22018): Numeric value 'SAaL Tuvarinerine Neano sBites (53mg x 30) 100mg (S) (100mg, case of 60)' is not recognized
要导入的字符串混合了字母、数字和特殊字符,需要以字符串类型存入Snowflake,示例数据如下:
Select as Elites Cartsridge - 1g 20box GSC (1g) FND,PRE-ROLL,(S) QUEENt OF SOUL,,,1G (1g, case of 25) CL Lord Flower Trim Preroll 1g (H) (1.0g, case of 300) Blueberry Indica 10 Padfck Gusgmmies (100mg THC, case of 50) SELECT Disphdosable Cart - Tangie - 0.3g (0.3g, case of 20) Grassrootds Shorties Pre-Rolls It's Mimosa (2g, case of 10) Capsulses - East Coast Sour Diesel RSO - 10mg (10pk, 100mg) (10mg. 10pk
简化转换逻辑,避免多余嵌套:
Snowflake里TEXT和VARCHAR是兼容类型,没必要嵌套转换。直接用下面的写法就能确保字段被识别为字符串:O.ITEM_PRODUCT_NAME::VARCHAR AS PRODUCT_NAME如果Databricks里的
ITEM_PRODUCT_NAME本身就是字符串类型,甚至可以直接用,不用显式转换:O.ITEM_PRODUCT_NAME AS PRODUCT_NAME检查Snowflake目标表字段类型:
先确认Snowflake表中PRODUCT_NAME字段是VARCHAR(或TEXT)类型,别设成了数值类型(比如INT、FLOAT)。要是字段类型错了,怎么转换都会报错,得先改表结构:ALTER TABLE 你的表名 ALTER COLUMN PRODUCT_NAME SET DATA TYPE VARCHAR(255);确认Databricks端的数据类型:
在Databricks里检查ITEM_PRODUCT_NAME列是不是string类型,如果是其他类型(比如variant),先在Databricks转成字符串再写入Snowflake:df = df.withColumn("ITEM_PRODUCT_NAME", df["ITEM_PRODUCT_NAME"].cast("string")) # 这里写后续写入Snowflake的代码
内容的提问来源于stack exchange,提问作者bigdata techie

