After playing around with features I was hesitant to try, something worked. I removed my extract without deleting the file. Then I re-extracted with the incremental refresh and it worked!
By why did it work? What's going on here?
I've been working on this problem for the last week. At first I thought it was because of the extract itself, but quickly learned it wasn't that. Here are some more details about what my problems were:
I used a WITH clause to reduce the cost of my SQL query. Within this WITH clause was a CASE statement with a list where IP addresses matched a list. I used typical SQL syntax, and this code would work completely fine to build the extract, but would fail upon setup of the incremental refresh. Today I commented out that CASE statement and the incremental refresh worked perfectly fine!
So rather than setting up a list within a CASE within my WITH clause, I have a lengthy CASE with a bunch of WHEN conditions that each equal one of the previous list items.
If you are experiencing issues with a curly bracket that's not there, odds are that it's because Tableau is adding this bracket around you code for its purposes. There seems to be a limit to how many layers/levels of brackets of any kind there can be and lists could be the problem.
Or apparently comments of any kind... that seems to also prevent the extract from working, too.