---
title: Inferred wrong type troubleshooting
meta:
  description: Common issues and solutions for ClickHouse inferring wrong data types in Tinybird.
---

# Inferred wrong type troubleshooting

Common issues and solutions for ClickHouse inferring wrong data types in Tinybird.

## Common issues

### String inferred as numeric

**Issue**: ClickHouse infers string data as numeric type

**Solution**: Explicitly specify string type in schema
```sql
-- Explicitly specify string type
CREATE TABLE events (
  id UInt32,
  user_id String,  -- Explicitly string, not inferred numeric
  value Float64
)
```

### Numeric inferred as string

**Issue**: ClickHouse infers numeric data as string type

**Solution**: Explicitly specify numeric type in schema
```sql
-- Explicitly specify numeric type
CREATE TABLE events (
  id UInt32,
  user_id UInt32,  -- Explicitly numeric, not inferred string
  value Float64
)
```

## Type inference problems

### Mixed data types

**Issue**: Same column has mixed data types in sample

**Solution**: Use consistent data types or handle in schema
```sql
-- Handle mixed types in schema
CREATE TABLE events (
  id UInt32,
  mixed_field String,  -- Use string to handle mixed types
  value Float64
)
```

### Date format confusion

**Issue**: ClickHouse infers wrong date format

**Solution**: Explicitly specify date type and format
```sql
-- Explicitly specify date type
CREATE TABLE events (
  id UInt32,
  timestamp DateTime,  -- Explicitly DateTime
  date Date           -- Explicitly Date
)
```

## Schema hints

### Using SCHEMA hints

**Issue**: Need to override type inference

**Solution**: Use SCHEMA hints in data source
```sql
-- Use SCHEMA hints to override inference
SCHEMA >
  id UInt32,
  user_id String,
  timestamp DateTime,
  value Float64
```

### Handling JSON fields

**Issue**: JSON fields inferred incorrectly

**Solution**: Use explicit JSON type handling
```sql
-- Handle JSON fields explicitly
CREATE TABLE events (
  id UInt32,
  data JSON,  -- Explicitly JSON type
  metadata String  -- Keep as string if needed
)
```

## Debugging type inference

### Using toTypeName()

**Issue**: Need to check what type ClickHouse inferred

**Solution**: Use toTypeName() function
```sql
-- Check inferred types
SELECT
  toTypeName(column_name) as inferred_type,
  column_name
FROM events
LIMIT 1
```

### Checking sample data

**Issue**: Need to understand why wrong type was inferred

**Solution**: Examine sample data
```sql
-- Examine sample data to understand inference
SELECT
  column_name,
  toTypeName(column_name) as type
FROM events
LIMIT 10
```

## Best practices

1. **Always specify types** - Don't rely on type inference
2. **Use SCHEMA hints** - Override inference when needed
3. **Check sample data** - Understand what data is being ingested
4. **Use toTypeName()** - Debug type inference issues
5. **Document expected types** - Keep track of expected data types

## Related documentation

- [Data types](/sql-reference/data-types)
- [Data source configuration](/forward/get-data-in/data-sources)
