diff --git a/superset-frontend/src/datasource/DatasourceEditor.jsx b/superset-frontend/src/datasource/DatasourceEditor.jsx
index 89b8b7a03a..81ced4b575 100644
--- a/superset-frontend/src/datasource/DatasourceEditor.jsx
+++ b/superset-frontend/src/datasource/DatasourceEditor.jsx
@@ -616,7 +616,13 @@ class DatasourceEditor extends React.PureComponent {
'values from the table. Typically the intent would be to limit the scan ' +
'by applying a relative time filter on a partitioned or indexed time-related field.',
)}
- control={}
+ control={
+
+ }
/>
)}
{this.state.isSqla && (
diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py
index cd93e46bb5..a05c63e1b4 100644
--- a/superset/connectors/sqla/models.py
+++ b/superset/connectors/sqla/models.py
@@ -502,7 +502,7 @@ class SqlaTable( # pylint: disable=too-many-public-methods,too-many-instance-at
table_name = Column(String(250), nullable=False)
main_dttm_col = Column(String(250))
database_id = Column(Integer, ForeignKey("dbs.id"), nullable=False)
- fetch_values_predicate = Column(String(1000))
+ fetch_values_predicate = Column(Text)
owners = relationship(owner_class, secondary=sqlatable_user, backref="tables")
database: Database = relationship(
"Database",
diff --git a/superset/migrations/versions/07071313dd52_change_fetch_values_predicate_to_text.py b/superset/migrations/versions/07071313dd52_change_fetch_values_predicate_to_text.py
new file mode 100644
index 0000000000..320fb55a35
--- /dev/null
+++ b/superset/migrations/versions/07071313dd52_change_fetch_values_predicate_to_text.py
@@ -0,0 +1,84 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""change_fetch_values_predicate_to_text
+
+Revision ID: 07071313dd52
+Revises: 6d20ba9ecb33
+Create Date: 2021-08-09 17:32:56.204184
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = "07071313dd52"
+down_revision = "6d20ba9ecb33"
+
+import logging
+
+import sqlalchemy as sa
+from alembic import op
+from sqlalchemy import and_, func, or_
+from sqlalchemy.dialects import postgresql
+from sqlalchemy.sql.schema import Table
+
+from superset import db
+from superset.connectors.sqla.models import SqlaTable
+
+
+def upgrade():
+ with op.batch_alter_table("tables") as batch_op:
+ batch_op.alter_column(
+ "fetch_values_predicate",
+ existing_type=sa.String(length=1000),
+ type_=sa.Text(),
+ existing_nullable=True,
+ )
+
+
+def remove_value_if_too_long():
+ bind = op.get_bind()
+ session = db.Session(bind=bind)
+
+ # it will be easier for users to notice that their field has been deleted rather than truncated
+ # so just remove it if it won't fit back into the 1000 string length column
+ try:
+ rows = (
+ session.query(SqlaTable)
+ .filter(func.length(SqlaTable.fetch_values_predicate) > 1000)
+ .all()
+ )
+
+ for row in rows:
+ row.fetch_values_predicate = None
+
+ logging.info("%d values deleted", len(rows))
+
+ session.commit()
+ session.close()
+ except Exception as ex:
+ logging.warning(ex)
+
+
+def downgrade():
+ remove_value_if_too_long()
+
+ with op.batch_alter_table("tables") as batch_op:
+ batch_op.alter_column(
+ "fetch_values_predicate",
+ existing_type=sa.Text(),
+ type_=sa.String(length=1000),
+ existing_nullable=True,
+ )